Ser*_*gey 6 java testing junit unit-testing junit5
我在 JUnit5 上进行了大量测试,并在多个线程中并行运行。还有有关每次测试时间的信息。我想在最长的测试开始时运行,并将最快的测试留在最后以优化公共执行时间。
我还没有找到在 JUnit5 中执行此操作的方法。
在版本中,5.4有一个org.junit.jupiter.api.MethodOrderer接口允许您在测试类中编写测试排序器。并通过注释连接到测试类org.junit.jupiter.api.TestMethodOrder。
对于整个测试套件,我想要类似的东西,但在全球范围内。
现在可以在 JUnit 5 中订购测试类(自v5.8.0起)。
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
Run Code Online (Sandbox Code Playgroud)
其他 Junit 内置类排序器实现:
org.junit.jupiter.api.ClassOrderer$ClassName
org.junit.jupiter.api.ClassOrderer$DisplayName
org.junit.jupiter.api.ClassOrderer$Random
Run Code Online (Sandbox Code Playgroud)
有关设置配置参数的其他方法(除了junit-platform.properties文件),请参阅此处。
您还可以提供自己的订购者。它必须实现ClassOrderer接口:
package foo;
public class MyOrderer implements ClassOrderer {
@Override
public void orderClasses(ClassOrdererContext context) {
Collections.shuffle(context.getClassDescriptors());
}
}
Run Code Online (Sandbox Code Playgroud)
junit.jupiter.testclass.order.default=foo.MyOrderer
Run Code Online (Sandbox Code Playgroud)
@Nested测试类不能通过ClassOrderer排序。请参阅 JUnit 5文档和ClassOrderer api 文档以了解有关排序测试类的更多信息。