如何在JUnit5中更改测试执行顺序?

时间:2016-11-17 21:19:32

标签: junit5

JUnit4具有@FixMethodOrder注释,允许使用测试方法执行的字母顺序。是否有类似的JUnit5机制?

3 个答案:

答案 0 :(得分:17)

编辑:JUnit 5.4现在正式发布,因此不再需要使用快照。

现在可以使用JUnit 5.4。

https://junit.org/junit5/docs/current/user-guide/#writing-tests-test-execution-order

  

要控制执行测试方法的顺序,请注释您的   测试类或带有@TestMethodOrder的测试接口,并指定   所需的MethodOrderer实现。您可以实现自己的   自定义MethodOrderer或使用以下内置之一   MethodOrderer实现。

     

字母数字:根据测试方法的名称对它们进行字母数字排序   和正式的参数列表。

     

OrderAnnotation:根据值对测试方法进行数字排序   通过@Order注释指定。

答案 1 :(得分:12)

不,还没有。对于单元测试,执行顺序应该是无关紧要的。对于更复杂的测试,JUnit的目标是provide explicit support - 测试排序将是其中的一部分。

答案 2 :(得分:0)

5.8.0-M1 版本开始,也可以订购测试类。

src/test/resources/junit-platform.properties

# ClassOrderer$OrderAnnotation sorts classes based on their @Order annotation
junit.jupiter.testclass.order.default=org.junit.jupiter.api.ClassOrderer$OrderAnnotation

其他 Junit 内置类排序器实现:

org.junit.jupiter.api.ClassOrderer$ClassName
org.junit.jupiter.api.ClassOrderer$DisplayName
org.junit.jupiter.api.ClassOrderer$Random

其他方式(除了junit-platform.properties 文件)设置配置参数参考here

您也可以提供自己的订购者。它必须实现 ClassOrderer 接口:

package foo;
public class MyOrderer implements ClassOrderer {
    @Override
    public void orderClasses(ClassOrdererContext context) {
        Collections.shuffle(context.getClassDescriptors());
    }
}
junit.jupiter.testclass.order.default=foo.MyOrderer

请注意,@Nested 测试类不能由 ClassOrderer 排序。

请参阅 JUnit 5 documentationsClassOrderer api docs 以了解有关订购测试类的更多信息。