【发布时间】:2019-10-09 10:18:07
【问题描述】:
我正在尝试使用 micronaut,但在理解如何进行单元测试方面遇到了一些困难。
我有一个简单的应用程序,只有一个控制器(返回 hello)。
现在我想测试这个端点。来自 springboot 我期待 micronaut 有一些像SpringRunner 这样的跑步者类,我找不到任何东西。 micronaut 中是否有用于运行测试的 runner 类?
从文档here 我看到我可以使用 HTTPClient 测试我的其余端点。我都试过了
- 低级 HttpClient
- 编译时间 HttpClient
这是我的测试类的 sn-p
@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 到底做了什么?
我可以让它工作的唯一方法是像这样显式启动服务器(EmbeddedServer 上的@Inject 不做任何事情)
server = ApplicationContext.run(EmbeddedServer.class);
helloClient = server.getApplicationContext().getBean(HelloClient.class);
即使这样,它也会启动一个服务器实例。这不是我想要的。因为我不想启动服务器进行单元测试。此外,我不想以这种方式从应用程序上下文中获取 bean。 为什么@Inject、@Client、@EmbeddedServer 在我的情况下不起作用,我在这里遗漏了什么吗?
在 springboot 的情况下,我只能单独测试 weblayer(使用 mockmvc 和 springboottest),而不是启动整个应用程序上下文。 在 micronaut 中是否有等价物?
我正在使用 micronaut 1.0.2
【问题讨论】:
-
“根据我的观察,注释 @MicronautTest 似乎没有做任何事情。” - 绝对不是
@MicronautTest什么都不做。您的测试看起来像 JUnit 测试。您的项目中是否依赖于io.micronaut.test:micronaut-test-junit5? -
@JeffScottBrown 不,我没有。我有
micronaut-test-core和junit 4 -
micronaut 测试库为 JUnit 5 和 Spock 提供扩展。
-
您添加了评论“我正在使用 micronaut 1.0.2”,但您链接的文档 (docs.micronaut.io/snapshot/guide/index.html#creatingClient) 是最新的快照文档。您可能应该查看位于 docs.micronaut.io/1.0.2/guide/index.html#creatingClient 的 1.0.2 文档。除此之外,
@MicronautTest的文档可在 micronaut-projects.github.io/micronaut-test/1.1.1/guide/… 获得,其中指出我们支持 Spock 和 JUnit 5。
标签: java unit-testing micronaut