必须同时引入junit-jupiter-api和junit-jupiter-engine,缺一不可;前者提供@test等注解和断言,后者支撑测试执行,否则@test报红或“no tests found”。

要在 Java 项目中正确引入 JUnit 5(Jupiter)核心测试引擎依赖,关键不是只加一个依赖,而是确保 API 层 和 运行引擎 都到位——缺一不可。否则会出现@Test注解报红、右键无法运行、或mvn test提示“No tests found”等问题。
Maven 项目:必须同时声明 API 和 Engine
JUnit Jupiter 分为两个核心组件:
- junit-jupiter-api:提供@Test、@BeforeEach等注解和Assertions断言类,用于编写测试代码;
- junit-jupiter-engine:实现测试执行逻辑,Maven Surefire 插件靠它识别并运行 @Test 方法。
推荐写法(使用统一版本号,如 5.10.2):
<dependency><groupid>org.junit.jupiter</groupid><artifactid>junit-jupiter-api</artifactid><version>5.10.2</version><scope>test</scope></dependency><dependency><groupid>org.junit.jupiter</groupid><artifactid>junit-jupiter-engine</artifactid><version>5.10.2</version><scope>test</scope></dependency>
⚠️ 注意:junit-jupiter 是一个“bom-style”聚合依赖,内部已包含 api + engine,但部分旧版构建工具或 IDE 可能解析不稳定,显式分开声明更稳妥、更可控。
Gradle 项目:区分编译期与运行期依赖
Gradle 对 classpath 更严格,必须明确作用域:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
testImplementation:让 JUnit 注解和 Assertions 在编译测试代码时可用; -
testRuntimeOnly:确保 engine 在运行测试时被加载(否则@Test方法会被跳过)。
正确配置示例:
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.2'
}
如果还用到参数化测试(@ParameterizedTest),再加:testImplementation 'org.junit.jupiter:junit-jupiter-params:5.10.2'。
必须避开的常见陷阱
- 混入 JUnit 4 依赖(如
junit:junit:4.13.2)——会导致类加载冲突,@Test 报 “Cannot resolve symbol”; - 只加
junit-jupiter-api不加engine——IDE 可能识别注解,但实际运行时无测试被发现; - Maven Surefire 插件版本太低(如 2.12)——需升级到 2.22.0+,并在插件中显式启用 Jupiter Provider;
- 测试类没放在
src/test/java下,或类名不匹配默认扫描模式(如未以 Test 结尾)——构建工具直接忽略。
Spring Boot 项目可简化
Spring Boot 2.4+ 起,spring-boot-starter-test 已默认包含 junit-jupiter-api 和 junit-jupiter-engine,无需额外引入:
<dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-test</artifactid><scope>test</scope></dependency>
但要注意:若项目中残留 JUnit 4 的 junit:junit 依赖,仍需手动排除,否则会干扰 Jupiter 启动。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










