Contents
  1. 1. 测试执行顺序
    1. 1.1. 方法顺序
    2. 1.2. 类的顺序

测试执行顺序

默认,测试类或方法执行顺序由算法决定,但是可能不那么显而易见。这章确保随后执行的测试集合,测试类和测试方法以相同的顺序执行,所以允许重复编译。

方法顺序

即使真正的单元测试不应该依赖执行顺序,但还是有时必须要强制执行顺序——例如书写集成测试或函数式测试,执行顺序很重要
@TestInstance(Lifecycle.PER_CLASS)
为了控制测试方法的执行顺序,注解你的类或测试接口使用@TestMethodOrder或者重新定义需要的TestOrder实现。你可以实现你自己的TestOrder或使用内建的实现

MethodOrderer.DisplayName 基于显示名称的字母数字顺序的排序。
MethodOrderer.MethodName 基于名字或参数列表
MethodOrderer.OrderAnnotation 通过@Order
MethodOrderer.Random 基于伪随机,支持自定义种子。

1
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
27
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;

@TestMethodOrder(OrderAnnotation.class)
class OrderedTestsDemo {

@Test
@Order(1)
void nullValues() {
// perform assertions against null values
}

@Test
@Order(2)
void emptyValues() {
// perform assertions against empty values
}

@Test
@Order(3)
void validValues() {
// perform assertions against valid values
}

}

类的顺序

即使测试类典型不应该依赖执行的顺序,还有些场景需要强制执行特定的类的顺序。你可能希望随机执行确保没有意外依赖,你可能希望执行在这些场景:
快速失败模式
并行场景,执行更长先执行,最短的测试执行。跟方法一样的自定义ClassOrder

1
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
27
import 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() {
}
}
}

Contents
  1. 1. 测试执行顺序
    1. 1.1. 方法顺序
    2. 1.2. 类的顺序