如何在 JUnit5 中为测试套件设置自定义测试执行顺序?
How to set custom test execution order for a test suite in JUnit5?
我在 JUnit5 上有大量测试,我 运行 在多个线程中并行进行。
还有关于每次测试时间的信息。
我想运行在最长的测试开始时,把最快的留在最后,以优化常见的执行时间。
我还没有找到在 JUnit5 中执行此操作的方法。
在版本 5.4
中有一个 org.junit.jupiter.api.MethodOrderer
接口,允许您在测试 class 中编写测试排序器。并通过注释 org.junit.jupiter.api.TestMethodOrder
.
连接到测试 class
对于整个测试套件,我想要类似但全局的东西。
很遗憾,您所要求的目前在 JUnit 5 中是不可能的(即在 JUnit 平台上或在 JUnit Jupiter 中)。
但是有一个 open issue 专门讨论这个主题。所以请随意插话。
现在可以在 JUnit 5 中订购测试 classes(自 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 内置 class 排序器实现:
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
测试 classes 不能由 ClassOrderer 排序。
请参阅 JUnit 5 documentations and ClassOrderer api docs 以了解有关排序测试的更多信息 classes。
我在 JUnit5 上有大量测试,我 运行 在多个线程中并行进行。 还有关于每次测试时间的信息。 我想运行在最长的测试开始时,把最快的留在最后,以优化常见的执行时间。
我还没有找到在 JUnit5 中执行此操作的方法。
在版本 5.4
中有一个 org.junit.jupiter.api.MethodOrderer
接口,允许您在测试 class 中编写测试排序器。并通过注释 org.junit.jupiter.api.TestMethodOrder
.
对于整个测试套件,我想要类似但全局的东西。
很遗憾,您所要求的目前在 JUnit 5 中是不可能的(即在 JUnit 平台上或在 JUnit Jupiter 中)。
但是有一个 open issue 专门讨论这个主题。所以请随意插话。
现在可以在 JUnit 5 中订购测试 classes(自 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 内置 class 排序器实现:
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
测试 classes 不能由 ClassOrderer 排序。
请参阅 JUnit 5 documentations and ClassOrderer api docs 以了解有关排序测试的更多信息 classes。