Junit5 之Test Execution Order
测试执行顺序
默认,测试类或方法执行顺序由算法决定,但是可能不那么显而易见。这章确保随后执行的测试集合,测试类和测试方法以相同的顺序执行,所以允许重复编译。
方法顺序
即使真正的单元测试不应该依赖执行顺序,但还是有时必须要强制执行顺序——例如书写集成测试或函数式测试,执行顺序很重要
@TestInstance(Lifecycle.PER_CLASS)
为了控制测试方法的执行顺序,注解你的类或测试接口使用@TestMethodOrder或者重新定义需要的TestOrder实现。你可以实现你自己的TestOrder或使用内建的实现
MethodOrderer.DisplayName 基于显示名称的字母数字顺序的排序。
MethodOrderer.MethodName 基于名字或参数列表
MethodOrderer.OrderAnnotation 通过@Order
MethodOrderer.Random 基于伪随机,支持自定义种子。
1 | import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; |
类的顺序
即使测试类典型不应该依赖执行的顺序,还有些场景需要强制执行特定的类的顺序。你可能希望随机执行确保没有意外依赖,你可能希望执行在这些场景:
快速失败模式
并行场景,执行更长先执行,最短的测试执行。跟方法一样的自定义ClassOrder1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27import org.junit.jupiter.api.ClassOrderer;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestClassOrder;
@TestClassOrder(ClassOrderer.OrderAnnotation.class)
class OrderedNestedTestClassesDemo {
@Nested
@Order(1)
class PrimaryTests {
@Test
void test1() {
}
}
@Nested
@Order(2)
class SecondaryTests {
@Test
void test2() {
}
}
}