JUnit4具有@FixMethodOrder
注释,允许使用测试方法执行的字母顺序。是否有类似的JUnit5机制?
答案 0 :(得分:17)
编辑:JUnit 5.4现在正式发布,因此不再需要使用快照。
现在可以使用JUnit 5.4。
https://junit.org/junit5/docs/current/user-guide/#writing-tests-test-execution-order
要控制执行测试方法的顺序,请注释您的 测试类或带有@TestMethodOrder的测试接口,并指定 所需的MethodOrderer实现。您可以实现自己的 自定义MethodOrderer或使用以下内置之一 MethodOrderer实现。
字母数字:根据测试方法的名称对它们进行字母数字排序 和正式的参数列表。
OrderAnnotation:根据值对测试方法进行数字排序 通过@Order注释指定。
答案 1 :(得分:12)
不,还没有。对于单元测试,执行顺序应该是无关紧要的。对于更复杂的测试,JUnit的目标是provide explicit support - 测试排序将是其中的一部分。
答案 2 :(得分:0)
从 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 以了解有关订购测试类的更多信息。