我在JUnit5上进行了大量测试,这些测试在多个线程中并行运行。 还有关于每个测试时间的信息。 我想在最长的测试开始时运行,而在最后的测试中保留最快的速度,以优化常见的执行时间。
我尚未在JUnit5中找到实现此目的的方法。
在ModelForm
版中,有一个5.4
接口,允许您在测试类中编写测试分类器。并通过注释org.junit.jupiter.api.MethodOrderer
连接到测试类。
对于整个测试套件,我希望获得类似的结果,但在全球范围内。
答案 0 :(得分:3)
我以前回答过这个问题,here。现在可以在 JUnit 5 中订购测试类(自 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 documentations 和 ClassOrderer api docs 以了解有关订购测试类的更多信息。
答案 1 :(得分:1)
不幸的是,您目前所要求的是在JUnit 5中无法实现的(即在JUnit平台上或在JUnit Jupiter中)。
但是有一个open issue专门用于此主题。因此,请随时在其中鸣响。