@Test标记非静态、无参、void返回的实例方法为测试方法;@BeforeEach标记非静态、无参、void返回的方法,在每个@Test前执行以准备测试环境。

@Test 和 @BeforeEach 是 JUnit 5 中最基础、最常使用的两个注解,写法简单但有明确规则,用错会导致测试不执行或报错。
@Test 注解怎么写
标记一个普通实例方法为测试方法,必须满足:
- 方法不能是
static(加了 static 就不会被识别为测试) - 返回类型必须是
void - 不能有参数(参数化测试需用
@ParameterizedTest) - 建议方法名见名知意,比如
shouldCalculateSumCorrectly()
示例:
```javaimport org.junit.jupiter.api.Test;
public class CalculatorTest {
@Test
void addReturnsFourWhenTwoPlusTwo() {
int result = Calculator.add(2, 2);
assertEquals(4, result); // 需要导入 Assertions
}
}
@BeforeEach 注解怎么写
在每个 @Test 方法运行前自动执行一次,用于准备测试所需的干净状态(如新建对象、清空集合、开启模拟等):
立即学习“Java免费学习笔记(深入)”;
- 方法不能是
static - 返回类型必须是
void - 不能有参数
- 可定义多个
@BeforeEach方法,执行顺序按声明顺序(但一般不建议多写)
示例:
```javaimport org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class ListTest {
private List
@BeforeEach
void setUp() {
list = new ArrayList(); // 每个测试前都拿到新 list
}
@Test
void sizeIsZeroWhenNewListCreated() {
assertEquals(0, list.size());
}
@Test
void addsOneElementAndSizeBecomesOne() {
list.add("hello");
assertEquals(1, list.size());
}
}
常见错误提醒
以下写法会导致编译通过但测试不运行或报错:
-
@Test static void test() { ... }→ JUnit 5 不支持静态测试方法 -
@BeforeEach static void init() { ... }→ 必须是非静态的实例方法 - 忘记导入
org.junit.jupiter.api.Test或org.junit.jupiter.api.BeforeEach - 测试类没放在
src/test/java下,或未配置测试依赖(如junit-jupiter-api)


















