在Java中使用JUnit标记单元测试方法需用@Test注解,方法须为public、void返回类型、无参数,且正确导入对应版本注解(JUnit 4为org.junit.Test,JUnit 5为org.junit.jupiter.api.Test),推荐统一使用JUnit 5依赖。

在 Java 中使用 JUnit 标记一个常规单元测试方法,只需用 @Test 注解修饰该方法即可,但需满足几个基本条件:方法必须是 public、无返回值(void)、不带参数,且所属类通常不声明构造函数或仅含无参构造函数。
确保引入正确的 JUnit 版本依赖
JUnit 4 和 JUnit 5 的 @Test 注解包路径不同,不能混用:
- JUnit 4:
import org.junit.Test; - JUnit 5:
import org.junit.jupiter.api.Test;
若项目同时存在两个版本,IDE 可能自动导入错误的注解,导致测试不被识别。Maven 中推荐统一使用 JUnit 5,并排除旧版:
<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.10.0</version> <scope>test</scope> </dependency>
编写符合规范的测试方法
一个被 @Test 正确识别的方法,必须满足以下要求:
立即学习“Java免费学习笔记(深入)”;
- 所在类无需继承任何父类,也不需要
@RunWith(JUnit 5 已废弃该注解) - 方法访问修饰符为
public(JUnit 4 要求严格;JUnit 5 默认允许 package-private,但建议显式写 public) - 返回类型为
void - 不能有参数(JUnit 5 支持参数化测试,但需配合
@ParameterizedTest,不是普通@Test)
示例(JUnit 5):
import org.junit.jupiter.api.Test;
public class CalculatorTest {
@Test
void shouldAddTwoNumbers() {
int result = new Calculator().add(2, 3);
assertEquals(5, result); // 需配合 assert 方法
}
}
运行测试前检查常见问题
即使写了 @Test,测试也可能不执行,原因包括:
- 测试类没放在
src/test/java目录下(Maven/Gradle 默认只扫描该路径) - IDE 没识别出测试框架(IntelliJ 中右键类名 → “Run 'xxxTest'”,或确认项目已启用 JUnit 5 支持)
- 缺少断言(如忘记调用
assertEquals等),虽不影响运行,但无法验证逻辑 - 方法名含中文、特殊符号或以 test 开头但未加注解(JUnit 4 曾支持命名约定,但 JUnit 5 必须依赖
@Test)
补充:常用配套注解(非必需但实用)
@Test 本身只标识测试方法,实际开发中常搭配其他注解提升可维护性:
-
@BeforeEach:每个测试方法执行前运行(替代 JUnit 4 的@Before) -
@AfterEach:每个测试方法执行后运行(替代 JUnit 4 的@After) -
@DisplayName("加法计算"):为测试方法指定中文或可读名称,便于报告展示 -
@Disabled("暂不运行"):临时跳过某个测试(替代 JUnit 4 的@Ignore)


















