java - Micronaut 单元测试:需要澄清 @MicronautTest
问题描述
我正在尝试使用 micronaut,我在理解如何进行单元测试方面遇到了一些困难。
我有一个简单的应用程序,只有一个控制器(它返回你好)。
现在我想测试这个端点。来自 springboot 我期待 micronaut 有一些像 runner 类SpringRunner
,我找不到任何。micronaut 中是否有用于运行测试的跑步者课程?
从这里的文档中,我看到我可以使用 HTTPClient 测试我的其余端点。我尝试了
- 低级 HttpClient
- 编译时间 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
似乎没有做任何事情。与@Inject
and的情况相同@Client
,当我运行测试时,所有字段都为空。所以我想知道到底是@MicronautTest
做什么的?
我可以让它工作的唯一方法是像这样显式启动服务器(@Inject
onEmbeddedServer
不做任何事情)
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 版本,
我1.0.2
安装了 micronaut 版本,通过它我生成了应用程序。但是我关注的文档是最新版本的1.2.3
请检查您的 pom 或构建文件中的 junit 版本。如果您使用最新(1.2.3)生成应用程序,您将拥有 Junit-5 和 Jupiter 依赖项,如果您使用旧版本(1.0.2),您将拥有 Junit4。
要使注释@MicronautTest
起作用,您需要 Junit5
推荐阅读
- javascript - Nuxt.js 动态组件错误“要么将模板预编译为渲染函数,要么使用编译器包含的构建”
- python - 如何在同一屏幕中显示列表视图以及如何制作搜索框以提供建议
- r - 为什么来自 forcats 的 fct_lump 无法处理我的数据?
- google-apps-script - 使用脚本在 Google 电子表格中自动增加 ID
- java - JPA - 具有嵌入 ID 的映射列表属性
- google-cloud-platform - Debian 9 上的 OpenCl 安装程序未检测到已安装的 lsb_core
- node.js - 将数据附加到 .json 文件
- python - 使用scrapy,python从DIV中的第二个孩子获取文本
- kubernetes - 从 kubelet 批准证书后,kubenetes 无法获取节点信息
- javascript - 事件处理程序被多次触发