本文详解如何在 Maven 中正确配置 Surefire 插件,通过 JUnit 5 的 @Tag 注解(如 @Tag("one"))精准执行标记测试,重点解决因测试类命名不匹配默认规则导致“0 个测试运行”的常见问题。
本文详解如何在 maven 中正确配置 surefire 插件,通过 junit 5 的 `@tag` 注解(如 `@tag("one")`)精准执行标记测试,重点解决因测试类命名不匹配默认规则导致“0 个测试运行”的常见问题。
在 Maven + JUnit 5 项目中,仅靠
Surefire 插件默认仅扫描符合以下通配符模式的 Java 类文件:
- **/Test*.java
- **/*Test.java
- **/*Tests.java
- **/*TestCase.java
而你的测试类名为 BubblegumApiIT.java(以 IT 结尾,属集成测试常见命名),不满足任一默认模式,因此 Surefire 根本不会加载该类,更不会解析其中的 @Tag("one") ——自然无法执行。
✅ 正确解决方案是显式告知 Surefire 哪些类需要被包含,有以下两种推荐方式:
方式一:在 pom.xml 中配置 (推荐)
<build><plugins><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-surefire-plugin</artifactid><version>3.0.0</version><!-- 建议使用稳定版,M5 存在已知兼容性问题 --><configuration><groups>one</groups><includes><include>**/*IT.java</include><!-- 匹配所有集成测试类 --><!-- 或更精确地: --><!-- <include>**/BubblegumApiIT.java</include> --></includes></configuration></plugin></plugins></build>
方式二:使用命令行动态指定(适合临时调试)
mvn -Dgroups=one -Dsurefire.includes="**/*IT.java" test
⚠️ 注意:-Dsurefire.includes 是 Surefire 3.0+ 引入的系统属性,等价于
补充说明与最佳实践
- ✅ @Tag 是 JUnit 5 原生支持的语义化分组机制,完全替代旧版 @Category;
- ✅ 可组合使用多标签:@Tag("one") @Tag("integration"),并通过逗号分隔运行:
one,integration ; - ⚠️ 确保测试类位于 src/test/java 下,且 maven-compiler-plugin 已正确配置 Java 版本(JUnit 5 要求 ≥ Java 8);
- ? 验证是否生效:添加 -X 参数查看 Surefire 日志,搜索 Running [.*] 和 Tests run: 行确认实际执行类名;
- ? 若同时存在单元测试(*Test.java)和集成测试(*IT.java),建议分离执行生命周期(如用 maven-failsafe-plugin 运行 *IT.java),避免混淆。
只要确保测试类被 Surefire 发现并加载,










