【发布时间】:2017-04-01 14:30:09
【问题描述】:
JUnit4 有@FixMethodOrder 注释,允许使用测试方法执行的字母顺序。有类似的JUnit5机制吗?
【问题讨论】:
标签: junit5
JUnit4 有@FixMethodOrder 注释,允许使用测试方法执行的字母顺序。有类似的JUnit5机制吗?
【问题讨论】:
标签: junit5
编辑: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 注解指定。
【讨论】:
dependencies { testImplementation "org.junit.jupiter:junit-jupiter-api:5.4.0-SNAPSHOT" testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.4.0-SNAPSHOT" } 就足够了
不,还没有。对于单元测试,执行顺序应该是无关紧要的。对于更复杂的测试,JUnit 的目标是provide explicit support - 测试排序将是其中的一部分。
【讨论】:
5.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文件)设置配置参数参考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 了解有关排序测试类的更多信息。
【讨论】: