首页 > 解决方案 > Micronaut 单元测试:需要澄清 @MicronautTest

问题描述

我正在尝试使用 micronaut,我在理解如何进行单元测试方面遇到了一些困难。

我有一个简单的应用程序,只有一个控制器(它返回你好)。
现在我想测试这个端点。来自 springboot 我期待 micronaut 有一些像 runner 类SpringRunner,我找不到任何。micronaut 中是否有用于运行测试的跑步者课程?

这里的文档中,我看到我可以使用 HTTPClient 测试我的其余端点。我尝试了

  1. 低级 HttpClient
  2. 编译时间 HttpClient

这是我拥有的测试类的片段

@MicronautTest
class HelloControllerSpec {
    @Inject
    EmbeddedServer server; 

    @Inject
    @Client("/")
    HttpClient client; 

    @Test
    void testHelloWorldResponse() {
          //client and server are null
           .........
    }
}  

@MicronautTest 
public class HelloClientSpec  {

    @Inject
    HelloClient client; 

    @Test
    public void testHelloWorldResponse(){
        //client is null
   }
}

从我观察到的,注释@MicronautTest似乎没有做任何事情。与@Injectand的情况相同@Client,当我运行测试时,所有字段都为空。所以我想知道到底是@MicronautTest做什么的?

我可以让它工作的唯一方法是像这样显式启动服务器(@InjectonEmbeddedServer不做任何事情)

server = ApplicationContext.run(EmbeddedServer.class);
helloClient = server.getApplicationContext().getBean(HelloClient.class);

即使这样,它也会启动一个服务器实例。这不是我想要的。因为我不想启动服务器进行单元测试。此外,我不想以这种方式从应用程序上下文中获取 bean。为什么@Inject, @Client,@EmbeddedServer在我的情况下不起作用,我在这里遗漏了什么吗?

在 springboot 的情况下,我只能单独测试 weblayer(使用 mockmvc 和 springboottest),而不是启动整个应用程序上下文。micronaut 中是否有等价物?

我正在使用 micronaut 1.0.2

标签: javaunit-testingmicronaut

解决方案


对于遇到此问题的任何人。这里有一些提示。这就是解决我的问题的原因。谦虚地提到 Jeff Scott Brown,他的建议将我推向了正确的方向。

  1. 请检查 micronaut 版本,
    1.0.2安装了 micronaut 版本,通过它我生成了应用程序。但是我关注的文档是最新版本的1.2.3

  2. 请检查您的 pom 或构建文件中的 junit 版本。如果您使用最新(1.2.3)生成应用程序,您将拥有 Junit-5 和 Jupiter 依赖项,如果您使用旧版本(1.0.2),您将拥有 Junit4。
    要使注释@MicronautTest起作用,您需要 Junit5


推荐阅读