Logo
Section 1 / 5

生命周期注解

学习使用 @BeforeAll、@AfterAll、@BeforeEach 和 @AfterEach 注解标记的生命周期方法。

导入

生命周期注解

学习使用 @BeforeAll、@AfterAll、@BeforeEach 和 @AfterEach 注解标记的生命周期方法。

JUnit 5 注解

JUnit 5 提供了四个与测试生命周期相关的注解:

  • @BeforeEach 标记的方法将在每个测试方法执行前运行。
  • @AfterEach 标记的方法将在每个测试方法执行后运行。
  • @BeforeAll 标记的方法将在所有测试执行前运行,该方法必须是静态的。
  • @AfterAll 标记的方法将在所有测试执行后运行,该方法必须是静态的。
...
生命周期注解

下面的代码展示了这些注解的使用方式。

我们有两个测试方法:simpleTest1() 和 simpleTest2(),它们按顺序测试所有注解,并输出结果为 pass 或 fail。

如名称所示,被 @BeforeEach 和 @AfterEach 标记的方法分别在每个 @Test 方法执行前和执行后调用。同样地,@BeforeAll 和 @AfterAll 方法分别在所有 @Test 方法执行前和执行后调用。让我们通过之前的测试类来演示这一过程。

1import org.junit.jupiter.api.AfterEach; 2import org.junit.jupiter.api.AfterAll; 3import org.junit.jupiter.api.BeforeEach; 4import org.junit.jupiter.api.BeforeAll; 5 6public class AnnotationTest { 7 @BeforeAll 8 public static void beforeAll() { 9 System.out.println("所有测试之前"); 10 } 11 @BeforeEach 12 public void beforeEach() { 13 System.out.println("每个测试之前"); 14 } 15 @Test 16 public void simpleTest1() { 17 System.out.println("测试1"); 18 } 19 @Test 20 public void simpleTest2() { 21 System.out.println("测试2"); 22 } 23 @AfterEach 24 public void afterEach() { 25 System.out.println("每个测试之后"); 26 } 27 @AfterAll 28 public static void afterAll() { 29 System.out.println("所有测试之后"); 30 } 31}

示例输出如下:

...
测试1示例输出

在上述输出中,@BeforeAll 方法首先在所有测试用例之前执行。随后,@BeforeEach 方法在每个测试用例之前执行。接着执行 Test1,然后 @AfterEach 方法在每个测试用例之后执行。

...
测试2示例输出

在上述输出中,@BeforeEach 方法在每个测试用例之前执行。随后执行 Test2,然后 @AfterEach 方法在每个测试用例之后执行。

...
上述代码的最终结果

最终,在所有测试用例执行完毕后,@AfterAll 方法被执行。

编写基础测试

禁用测试和显示名称生成器