@Test 是 JUnit 标识测试方法的核心注解,要求方法必须 public、void 返回、无参数、非 static;还支持 expected 和 timeout 参数。

@Test 注解是 JUnit 框架中标识测试方法的核心方式,它告诉测试运行器:这个方法需要被自动发现并执行。
必须满足的语法要求
一个方法要被正确识别为测试方法,仅加 @Test 不够,还需同时满足以下四点:
- 必须用 public 修饰(不能是 private、protected 或包级)
- 返回类型必须是 void(不能有 return 值)
- 参数列表必须为空(不能有任何形参)
- 不能是 static 方法(JUnit 会为每个测试方法创建新实例来调用)
@Test 的基本写法示例
在方法声明上方添加注解,并确保导入正确包:
import static org.junit.Assert.*;
@Test
public void testCalculateSum() {
Calculator calc = new Calculator();
int result = calc.add(2, 3);
assertEquals(5, result);
}
常见错误写法(不会被识别为测试)
以下情况即使写了 @Test,JUnit 也不会执行该方法,甚至可能报错或静默跳过:
立即学习“Java免费学习笔记(深入)”;
- 方法是 private void testXxx() —— 权限不足,反射无法访问
- 方法是 public int testXxx() —— 有返回值,违反 void 要求
- 方法是 public static void testXxx() —— JUnit 不支持静态测试方法
- 方法在 内部类 中(即使是 public void)—— JUnit 默认不扫描内部类
补充:@Test 的扩展能力
除了基础标识,@Test 还支持两个实用参数:
-
expected:指定预期抛出的异常类型,例如
@Test(expected = IllegalArgumentException.class),方法正常结束或抛出其他异常都会导致测试失败 -
timeout:设置毫秒级超时,例如
@Test(timeout = 500),执行超过 500ms 即判定为失败


















