Java 如何在JUnit5中为测试套件设置自定义测试执行顺序?
我在JUnit5上有大量的测试,我在几个线程中并行运行这些测试。 还有关于每次测试时间的信息。 我希望在最长测试开始时运行,并在结束时保留最快的测试,以优化公共执行时间 在JUnit5中,我还没有找到这样做的方法 在版本Java 如何在JUnit5中为测试套件设置自定义测试执行顺序?,java,unit-testing,testing,junit,junit5,Java,Unit Testing,Testing,Junit,Junit5,我在JUnit5上有大量的测试,我在几个线程中并行运行这些测试。 还有关于每次测试时间的信息。 我希望在最长测试开始时运行,并在结束时保留最快的测试,以优化公共执行时间 在JUnit5中,我还没有找到这样做的方法 在版本5.4中有一个org.junit.jupiter.api.MethodOrder接口,允许您在测试类中编写测试分类器。并通过注释org.junit.jupiter.api.TestMethodOrder连接到测试类 对于整个测试套件,我希望有类似的东西,但在全球范围内是一样的。不
5.4
中有一个org.junit.jupiter.api.MethodOrder
接口,允许您在测试类中编写测试分类器。并通过注释org.junit.jupiter.api.TestMethodOrder
连接到测试类
对于整个测试套件,我希望有类似的东西,但在全球范围内是一样的。不幸的是,您所要求的在JUnit 5中是不可能的(即,在JUnit平台上或JUnit Jupiter中)
然而,有一个专门讨论这个问题的方法。所以请随意插话。我以前已经回答过这个问题。现在可以在JUnit5中对测试类进行排序(因为) 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文件旁边),请参阅
您还可以提供自己的订购者。它必须实现ClassOrder接口:
package foo;
public class MyOrderer implements ClassOrderer {
@Override
public void orderClasses(ClassOrdererContext context) {
Collections.shuffle(context.getClassDescriptors());
}
}
请注意,@嵌套的
测试类不能由类排序器排序。
请参阅JUnit5和ClassOrder,以了解有关测试类排序的更多信息
junit.jupiter.testclass.order.default=foo.MyOrderer