【问题标题】:Micronaut unit testing : need clarification on @MicronautTestMicronaut 单元测试:需要澄清 @MicronautTest
【发布时间】:2019-10-09 10:18:07
【问题描述】:

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

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

从文档here 我看到我可以使用 HTTPClient 测试我的其余端点。我都试过了

  1. 低级 HttpClient
  2. 编译时间 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

【问题讨论】:

标签: java unit-testing micronaut


【解决方案1】:

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

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

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

【讨论】:

  • "Inject、Client 等注解在 1.0.2 版本中不可用。" - 这不是真的,并且与最初报告的问题无关。这两个注释都在 1.0.2 中可用(尽管 Inject 不是 Micronaut 注释,但可在 Micronaut 1.0.2 和所有其他版本的 Micronaut 中使用)。
  • @JeffScottBrown 同意注入不是来自 micronaut。我的意思是用 @Inject 注入 EmbeddedServer 在 1.0.2 中不起作用。对吗?
  • “我的意思是用@Inject 注入 EmbeddedServer 在 1.0.2 中不起作用。对吗?” - 不,那不正确。 github.com/jeffbrown/micronaut102testinject/blob/… 的测试在 1.0.2 应用程序中,并且该测试通过。如果没有看到演示该问题的项目,就不可能说出问题所在,但我的第一个猜测是您使用的是 1.1.x 的 micronaut-test,它与 Micronaut 1.0.2 不兼容。
猜你喜欢
  • 1970-01-01
  • 2011-11-09
  • 2012-07-18
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 2017-01-18
相关资源
最近更新 更多