繁体   English   中英

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

[英]How to set custom test execution order for a test suite in 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

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

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

对于设置配置参数的其他方式(除了junit-platform.properties文件),请参阅此处

您也可以提供自己的订购者。 它必须实现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 文档ClassOrderer api 文档以了解有关排序测试类的更多信息。

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

但是,有一个专门针对该主题的未解决问题 所以请随意插话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM