@beforeeach 在每个@test前执行一次,用于准备独立测试环境;方法须非静态、返回void、无参数;适合新建对象、初始化集合、重置状态等轻量操作。

@BeforeEach 是 JUnit 5 中最常用的测试生命周期注解之一,作用是在每个 @Test 方法执行前自动运行一次,专门用于准备干净、独立的测试环境。它不负责全局初始化,而是确保每个测试用例都从一个“全新起点”开始,避免相互干扰。
必须满足的三个条件
使用 @BeforeEach 的方法不能随意写,否则会编译失败或被框架忽略:
- 方法必须是非静态的(不能加 static)
- 返回类型必须是 void
- 参数列表必须为空(不能传参)
典型初始化操作有哪些
它适合做轻量、快速、实例级的准备工作,比如:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 新建被测对象:如 calculator = new Calculator();
- 初始化集合:如 list = new ArrayList(); 或 map = new HashMap();
- 重置可变状态:如清空静态计数器、设回默认标志位
- 配置 Mock 行为:如 when(mockService.getData()).thenReturn("test");
和 @BeforeAll 的关键区别
别把 @BeforeEach 和 @BeforeAll 混用:
- @BeforeEach 每个 @Test 前都执行一次(5 个测试就调用 5 次)
- @BeforeAll 只在整类所有测试开始前执行一次(且方法必须是 static)
- 耗时操作(如启动嵌入数据库、加载大配置文件)应放在 @BeforeAll;而对象重建、状态清空这类事,交给 @BeforeEach 更安全
配合 @AfterEach 清理更稳妥
初始化之后,往往需要对应清理。比如创建了临时文件、打开了流、或修改了共享对象:
- @AfterEach 方法会在每个 @Test 执行完后自动运行
- 常见做法是将测试中创建的资源置为 null、关闭 InputStream、清空 ThreadLocal 等
- 即使测试失败,@AfterEach 也会执行,有助于防止资源泄漏
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










