本文详解为何 mvn test 报告“0 tests run”,并指导你正确配置 Maven Surefire 插件,使命令行测试与 IntelliJ 点击运行行为一致。
本文详解为何 `mvn test` 报告“0 tests run”,并指导你正确配置 maven surefire 插件,使命令行测试与 intellij 点击运行行为一致。
Maven 默认不依赖显式插件声明即可执行测试——但前提是项目结构、命名规范和依赖均符合约定。当你执行 mvn test 却看到 0 tests run,通常并非因为“必须手动添加 Surefire 插件”,而是由于 Maven 无法自动发现或加载你的测试类。IntelliJ 能成功运行,是因为它绕过了 Maven 生命周期,直接调用 JUnit 测试引擎(如 JUnit Platform Launcher),并基于 IDE 的类路径和源码索引动态识别测试;而 mvn test 严格遵循 Maven 构建生命周期,依赖 Surefire 插件扫描、编译并执行符合命名/注解规范的测试。
✅ 正确配置 Surefire 插件(推荐方式)
虽然 Maven 核心已内置 Surefire 的默认绑定(test 阶段 → surefire:test),但自 Maven 3.9.0+ 起,默认不再自动启用较新版本的 Surefire,且旧版可能因 JDK 版本、JUnit 5 支持不足或测试类命名不规范导致静默跳过。因此,显式声明 Surefire 是可靠实践:
<project><!-- ... 其他配置 --><build><pluginmanagement><plugins><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-surefire-plugin</artifactid><version>3.2.5</version><!-- 推荐使用最新稳定版 --><configuration><!-- 可选:显式指定测试类模式(若命名不规范) --><!-- <includes><include>**/*Test.java</include></includes> --></configuration></plugin></plugins></pluginmanagement></build></project>
? pluginManagement 保证子模块继承统一配置;若为单模块项目,也可直接写在
下(省略 pluginManagement)。
✅ 确保测试类符合 Maven 约定
Surefire 默认仅识别满足以下任一条件的类:
- 类名以 Test 结尾(如 XyzTest.java ✅)
- 类名以 Tests 结尾
- 类名以 TestCase 结尾
- 使用 @Test 注解(JUnit 4/5)且位于 src/test/java 下
⚠️ 注意:xyzTest.java(小写 x)不符合 *Test.java 模式!Maven 默认匹配的是 首字母大写的驼峰命名(如 XyzTest.java)。请将文件重命名为 XyzTest.java 并确保类定义为:
// src/test/java/XyzTest.java
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class XyzTest {
@Test
void shouldPass() {
assertTrue(true);
}
}
同时,确保 pom.xml 中已声明 JUnit 5 依赖(Surefire 3.x 默认支持 JUnit 5):
<dependency><groupid>org.junit.jupiter</groupid><artifactid>junit-jupiter</artifactid><version>5.10.2</version><scope>test</scope></dependency>
✅ 验证与常用命令
配置完成后,执行:
mvn clean test # 清理、编译主代码、编译测试代码、运行测试 mvn verify # 同上,并额外执行集成测试(需 failsafe 插件)
查看输出中是否包含类似:
[INFO] --- maven-surefire-plugin:3.2.5:test (default-test) @ your-project --- [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
? 总结
- mvn test 失败不是“Maven 设计反直觉”,而是其约定优于配置(Convention over Configuration)原则的体现;
- IntelliJ 的独立运行能力 ≠ Maven 原生能力,二者构建机制不同;
- 显式配置 Surefire 插件是最佳实践,它提供可复现、跨环境一致的测试执行;
- 务必检查:✅ 文件名/类名规范、✅ src/test/java 路径、✅ JUnit 依赖作用域为 test、✅ JDK 版本兼容性(JUnit 5.8+ 需 JDK 11+)。
完成上述步骤后,mvn test 将与 IntelliJ 右键运行结果完全一致——这才是真正可靠的自动化测试起点。










