JUnit 5 单元测试核心是加依赖、写逻辑、跑断言;无需继承父类或固定命名,Maven/Gradle 添加 junit-jupiter 依赖,用 @Test 标注方法,静态导入 Assertions 断言,配合 @BeforeEach 等增强可维护性。

Java 中使用 JUnit 5 写单元测试,核心就三件事:加对依赖、写清逻辑、跑通断言。它不强制类名或方法名格式,也不用继承父类,比 JUnit 4 更轻量直接。
添加 JUnit 5 依赖(Maven 或 Gradle)
JUnit 5 主要用 junit-jupiter 这个模块,它已整合 API 和运行器。Maven 中只需在 pom.xml 的 <dependencies> 里加:
<groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId>-
<version>5.11.0</version>(推荐用当前最新稳定版) <scope>test</scope>
Gradle 用户则在 build.gradle 中写:testImplementation 'org.junit.jupiter:junit-jupiter:5.11.0'
别忘了在 test 块中启用平台:test { useJUnitPlatform() }
编写被测类和测试类
被测类可以是任意普通 Java 类,比如一个计算字符串长度的工具类:
立即学习“Java免费学习笔记(深入)”;
public class StringUtils {
public static int length(String s) {
return s == null ? 0 : s.length();
}
}
对应测试类放在 src/test/java 下,命名建议以 Test 结尾,例如 StringUtilsTest。不需要继承、不用 main 方法,只要导入注解和断言:
- 用
@Test标记测试方法 - 静态导入
Assertions.*使用assertEquals、assertTrue等 - 方法名可读性强,如
length_returnsZeroForNull
示例:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class StringUtilsTest {
@Test
void length_returnsZeroForNull() {
assertEquals(0, StringUtils.length(null));
}
@Test
void length_returnsCorrectValueForNonNullString() {
assertEquals(5, StringUtils.length("hello"));
}
}
常用注解与断言技巧
除了 @Test,几个高频注解能提升测试组织性:
-
@BeforeEach:每个测试方法执行前运行,适合初始化对象 -
@AfterEach:每个测试方法执行后运行,适合清理资源 -
@DisplayName:给测试方法起中文或带空格的描述名,报告更清晰 -
@Disabled:临时跳过某个测试(不是删除)
断言推荐用带消息参数的版本,出错时更容易定位问题:
assertEquals(5, result, "add(2, 3) 应该返回 5");
还支持检查异常:assertThrows(NullPointerException.class, () -> someMethod(null));
运行与验证
在 IntelliJ IDEA、VS Code 或 Eclipse 中,右键测试类或单个方法,选择 “Run ‘XXXTest’” 即可。IDE 会自动识别 @Test 并执行。成功显示绿色条,失败显示红色条并给出堆栈和期望/实际值对比。
确保项目 JDK 版本 ≥ 8,IDE 已启用 JUnit 5 运行器(IDEA 默认开启;Eclipse 需手动添加 JUnit 5 库)。若提示 “No tests found”,先检查是否漏了 junit-jupiter 依赖,或测试类是否误放在 src/main/java 下。


















