Micronaut 单元测试:需要对@MicronautTest 进行说明
Micronaut unit testing : need clarification on @MicronautTest
我正在尝试 micronaut,但在理解如何进行单元测试时遇到了一些困难。
我有一个只有一个控制器的简单应用程序(returns 你好)。
现在我想测试这个端点。来自 springboot,我期待 micronaut 有一些像 SpringRunner
这样的 运行ner class,但我找不到任何东西。 micronaut 中是否有用于 运行ning 测试的 运行ner class?
从文档 here 我看到我可以使用 HTTPClient 测试我的其余端点。
我都试过了
- 低级 HttpClient
- CompileTime HttpClient
这是测试的片段 class我有
@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
似乎没有做任何事情。它与 @Inject
和 @Client
的情况相同,当我 运行 测试时所有字段都是空的。所以我想知道 @MicronautTest
到底是做什么的?
我让它工作的唯一方法是显式启动服务器(@Inject
在 EmbeddedServer
上不做任何事情)像这样
server = ApplicationContext.run(EmbeddedServer.class);
helloClient = server.getApplicationContext().getBean(HelloClient.class);
即便如此,它也会启动一个服务器实例。这不是我想要的。因为我不想启动服务器进行单元测试。我也不想以这种方式从应用程序上下文中获取 bean。 为什么 @Inject
、@Client
、@EmbeddedServer
在我的情况下不起作用,我在这里遗漏了什么吗?
如果是 springboot,我只能单独测试 weblayer(使用 mockmvc 和 springboottest),而不是启动整个应用程序上下文。 micronaut 中有对应的吗?
我正在使用 micronaut 1.0.2
对于遇到此问题的任何人。这里有一些提示。这就是解决我的问题的方法。对 Jeff Scott Brown 的谦虚提及,他的建议将我推向了正确的方向。
请检查micronaut版本,
我安装了 micronaut 1.0.2
版本,通过它我生成了应用程序。但是我正在关注的文档是最新版本,即 1.2.3
请检查您的 pom 或构建文件中的 junit 版本。如果您使用最新的(1.2.3)生成应用程序,您将拥有 Junit-5 和 Jupiter 依赖项,如果您使用的是旧版本(1.0.2),您将拥有 Junit4.
要使注释 @MicronautTest
正常工作,您需要 Junit5
我正在尝试 micronaut,但在理解如何进行单元测试时遇到了一些困难。
我有一个只有一个控制器的简单应用程序(returns 你好)。
现在我想测试这个端点。来自 springboot,我期待 micronaut 有一些像 SpringRunner
这样的 运行ner class,但我找不到任何东西。 micronaut 中是否有用于 运行ning 测试的 运行ner class?
从文档 here 我看到我可以使用 HTTPClient 测试我的其余端点。
我都试过了- 低级 HttpClient
- CompileTime HttpClient
这是测试的片段 class我有
@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
似乎没有做任何事情。它与 @Inject
和 @Client
的情况相同,当我 运行 测试时所有字段都是空的。所以我想知道 @MicronautTest
到底是做什么的?
我让它工作的唯一方法是显式启动服务器(@Inject
在 EmbeddedServer
上不做任何事情)像这样
server = ApplicationContext.run(EmbeddedServer.class);
helloClient = server.getApplicationContext().getBean(HelloClient.class);
即便如此,它也会启动一个服务器实例。这不是我想要的。因为我不想启动服务器进行单元测试。我也不想以这种方式从应用程序上下文中获取 bean。 为什么 @Inject
、@Client
、@EmbeddedServer
在我的情况下不起作用,我在这里遗漏了什么吗?
如果是 springboot,我只能单独测试 weblayer(使用 mockmvc 和 springboottest),而不是启动整个应用程序上下文。 micronaut 中有对应的吗?
我正在使用 micronaut 1.0.2
对于遇到此问题的任何人。这里有一些提示。这就是解决我的问题的方法。对 Jeff Scott Brown 的谦虚提及,他的建议将我推向了正确的方向。
请检查micronaut版本,
我安装了 micronaut1.0.2
版本,通过它我生成了应用程序。但是我正在关注的文档是最新版本,即1.2.3
请检查您的 pom 或构建文件中的 junit 版本。如果您使用最新的(1.2.3)生成应用程序,您将拥有 Junit-5 和 Jupiter 依赖项,如果您使用的是旧版本(1.0.2),您将拥有 Junit4.
要使注释@MicronautTest
正常工作,您需要 Junit5