题目
JUnit 中 @Test 注解的作用是什么?
信息
- 类型:问答
- 难度:⭐
考点
单元测试基础,JUnit 注解,测试用例定义
快速回答
@Test 注解是 JUnit 框架中用于标记测试方法的核心注解。主要作用包括:
- 标识一个普通方法为可执行的测试用例
- 使测试框架能自动发现和执行该方法
- 支持配置超时和预期异常等测试行为
原理说明
@Test 是 JUnit 4+ 的核心注解,它通过 Java 反射机制被测试运行器识别。当测试运行时:
- 扫描所有包含 @Test 注解的方法
- 为每个方法创建独立的测试实例
- 按生命周期执行(@Before → @Test → @After)
代码示例
import org.junit.Test;
import static org.junit.Assert.*;
public class CalculatorTest {
@Test
public void testAddition() {
Calculator calc = new Calculator();
assertEquals(5, calc.add(2, 3)); // 验证 2+3=5
}
@Test(timeout = 1000) // 超时设置
public void testPerformance() {
// 执行耗时操作
}
@Test(expected = IllegalArgumentException.class) // 预期异常
public void testInvalidInput() {
new Calculator().divide(10, 0);
}
}最佳实践
- 每个 @Test 方法应独立且无状态
- 方法命名明确(如 testAdd_NegativeNumbers)
- 配合 @Before/@After 管理测试环境
- 使用断言(Assert)验证结果
常见错误
- 忘记导入 org.junit.Test 包
- 将 @Test 用于静态方法(违反 JUnit 规范)
- 测试方法包含返回值(应为 void)
- 多个测试方法间存在依赖关系
扩展知识
- JUnit 5 变化:@Test 仍在 org.junit.jupiter.api 包中,但不再需要 public 修饰方法
- 相关注解:
- @BeforeEach:替代 JUnit4 的 @Before
- @Disabled:禁用测试(替代 @Ignore)
- 测试覆盖率:结合 JaCoCo 等工具检查 @Test 覆盖的代码路径