如何在JUnit5中为测试套件设置自定义测试执行顺序?

时间:2019-04-11 12:11:19

标签: junit junit5

我在JUnit5上进行了大量测试,这些测试在多个线程中并行运行。 还有关于每个测试时间的信息。 我想在最长的测试开始时运行,而在最后的测试中保留最快的速度,以优化常见的执行时间。

我尚未在JUnit5中找到实现此目的的方法。

ModelForm版中,有一个5.4接口,允许您在测试类中编写测试分类器。并通过注释org.junit.jupiter.api.MethodOrderer连接到测试类。

对于整个测试套件,我希望获得类似的结果,但在全球范围内。

2 个答案:

答案 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 documentationsClassOrderer api docs 以了解有关订购测试类的更多信息。

答案 1 :(得分:1)

不幸的是,您目前所要求的是在JUnit 5中无法实现的(即在JUnit平台上或在JUnit Jupiter中)。

但是有一个open issue专门用于此主题。因此,请随时在其中鸣响。