1

我有三个测试类来测试我的控制器、服务和 Kafka 消息传递。当我独立运行 Kafka 消息传递时,它可以工作。但是当我一起运行我的所有测试文件时,Kafka 测试类只要它是第一个被执行的就通过,否则它会失败。

我想通过确保 Kafka 测试类始终是第一个执行来命令测试类的执行。

我怎样才能做到这一点?带测试套件??还有其他方法吗?我的应用程序是使用 Micronaut、Java 8 构建的。

4

2 回答 2

1

JUnit 运行的测试顺序是未定义的。您必须编写测试,以便它们可以独立运行。

首先,不要再假装集成测试(即实际调用 Kafka 的测试)是单元测试。如果您在被测试的方法之外调用某些东西,那么您正在运行集成测试。

可能的解决方案包括:

  1. 对 Kafka 的东西使用模拟,从而创建一个实际的单元测试。
  2. 要继续进行集成测试,请使用一种方法创建一个类,该方法被注释为 a @Test,并让它以所需的顺序调用现有“测试类”中的方法。
于 2021-05-21T16:50:06.007 回答
0

尝试使用有助于测试执行顺序的 @OrderWith 注释

@OrderWith(Alphanumeric.class)
public class TestMethodOrder {
    .....
}

上面的代码将按照方法名称的字母数字顺序运行测试。

我们还可以使用@FixMethodOrder 注释来提及方法必须排序和执行的顺序。目前,有三种选择

  • MethodSorters.DEFAULT

  • MethodSorters.NAME_ASCENDING

  • MethodSorters.JVM

    @FixMethodOrder(MethodSorters.NAME_ASCENDING) 公共类 TestMethodOrder { ..... }

参考:https ://github.com/junit-team/junit4/wiki/Test-execution-order

于 2021-06-10T05:46:44.790 回答