java - Micronaut 单元测试 : need clarification on @MicronautTest

标签 java unit-testing micronaut

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

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

来自文档here我发现我可以使用 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似乎没有做任何事情。 @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

最佳答案

对于遇到此问题的任何人。这里有一些提示。这就是我的案例中解决问题的方法。谨此提及 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

关于java - Micronaut 单元测试 : need clarification on @MicronautTest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58301944/

相关文章:

unit-testing - IEnumerables `Assert.AreEqual` 和 `CollectionAssert.AreEqual` 之间的 Nunit 差异

unit-testing - 当新功能导致现有单元测试无效时该怎么办?

java - 如何从 picocli 命令正确启动 micronaut 网络服务器?

使用 Eclipse/JNosql 的 Micronaut

python - Django Celery 测试运行程序做了非常奇怪的事情

java - 为什么Outputstream = new BufferedOutputStream没有缓冲?

java - 具有相同名称的私有(private)回调方法

java - Kotlin:通用方法和 for 循环要求迭代器()

micronaut - 使用 @JdbcRepository 注释关联 JDBC 数据源名称

java - 如何设置Java ProcessBuilder参数来运行外部.java文件?