BeforeEach与AfterEach注解的使用
<!--单元测试--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.7.0</version><scope>test</scope></dependency>
在 JUnit 5(Jupiter)中,@BeforeEach
和 @AfterEach
是两个常用的生命周期注解,用于在测试方法执行前后执行特定的代码,主要用于资源的初始化和清理工作。
1. @BeforeEach
- 作用:被该注解标记的方法会在每个测试方法执行之前运行。
- 适用场景:
- 初始化测试所需的对象(如创建数据库连接、初始化集合等)。
- 重置测试状态,确保每个测试方法都在相同的初始条件下执行。
- 注意事项:
- 该方法必须是
public void
类型,且不能有参数。 - 每个测试类中可以有多个
@BeforeEach
方法,但其执行顺序不固定(除非使用@Order
注解指定)。
- 该方法必须是
2. @AfterEach
- 作用:被该注解标记的方法会在每个测试方法执行之后运行。
- 适用场景:
- 清理测试资源(如关闭数据库连接、删除临时文件等)。
- 释放内存或重置共享状态,避免测试方法之间相互影响。
- 注意事项:
- 同样要求是
public void
类型,无参数。 - 即使测试方法执行失败(抛出异常),
@AfterEach
方法依然会执行。
- 同样要求是
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;public class ExampleTest {// 测试前初始化@BeforeEachvoid setUp() {System.out.println("执行@BeforeEach:初始化资源...");}// 测试方法1@Testvoid testMethod1() {System.out.println("执行测试方法1");}// 测试方法2@Testvoid testMethod2() {System.out.println("执行测试方法2");}// 测试后清理@AfterEachvoid tearDown() {System.out.println("执行@AfterEach:清理资源...");System.out.println("-----");}
}
输出结果:
执行@BeforeEach:初始化资源...
执行测试方法1
执行@AfterEach:清理资源...
-----
执行@BeforeEach:初始化资源...
执行测试方法2
执行@AfterEach:清理资源...
-----
总结
@BeforeEach
和@AfterEach
是每个测试方法级别的生命周期管理,适合处理与单个测试相关的资源。- 若需要在所有测试方法执行前后只执行一次初始化 / 清理(如创建数据库表、销毁表),可使用
@BeforeAll
和@AfterAll
(这两个注解标记的方法必须是静态方法)。