@beforeeach 是 junit5 中在每个@test前执行的初始化方法,需为public、void、非static、无参数;常用于为每个测试创建独立对象实例以保障隔离性,避免状态污染。

@BeforeEach 是 JUnit5 中用于在每个 @Test 方法执行前自动运行的初始化方法,特别适合创建独立、干净的对象实例,确保测试之间互不干扰。
基本写法和要求
被 @BeforeEach 标记的方法必须满足:
- 访问修饰符为 public 或包级可见(推荐 public)
- 返回类型为 void
- 不能是 static(否则会抛出 JUnitException)
- 不能带参数
典型用法:为每个测试新建对象
比如测试一个计算器类,每次测试都需要一个全新的 Calculator 实例:
@BeforeEach
void setUp() {
calculator = new Calculator(); // 每个@Test前都新建一次
}
这样 testAddition 和 testSubtraction 就各自拥有独立的 calculator 实例,不会因状态残留导致误判。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
配合成员变量使用
通常搭配类级别的成员变量声明:
public class CalculatorTest {
private Calculator calculator; // 声明在类中,非 static
@BeforeEach
void setUp() {
calculator = new Calculator();
}
@Test
void testAddition() {
assertEquals(5, calculator.add(2, 3));
}
@Test
void testSubtraction() {
assertEquals(1, calculator.subtract(4, 3));
}
}
注意:不要在 setUp() 里复用已有对象或修改共享状态,否则会破坏测试隔离性。
常见错误提醒
以下写法会导致运行失败或逻辑隐患:
- static void setUp() → 编译通过但运行时报错:“@BeforeEach method must not be static”
- Calculator calculator = new Calculator(); 直接在字段声明处初始化 → 所有测试共用同一实例,可能相互污染
- 在 setUp() 中加载耗时资源(如数据库连接)→ 应改用 @BeforeAll
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










