
升级到 Spring Boot 3 和 Maven Surefire Plugin 3.1.0 后,TestNG 测试因缺少 surefire-testng 依赖而被静默跳过;本文详解如何通过显式声明该依赖恢复 testng.xml 驱动的测试执行。
升级到 spring boot 3 和 maven surefire plugin 3.1.0 后,testng 测试因缺少 `surefire-testng` 依赖而被静默跳过;本文详解如何通过显式声明该依赖恢复 `testng.xml` 驱动的测试执行。
在 Spring Boot 3 及其配套构建工具链中,Maven Surefire Plugin 的行为发生了关键变化:从 3.0.0 版本起,Surefire 默认不再内置 TestNG 支持。这意味着即使你正确配置了
该问题与类名命名规范(如 *Test.java)无关——它纯粹源于 Surefire 插件的模块化演进。旧版本(如 2.22.x)将 TestNG 支持打包在主 JAR 中;而新版本(≥3.0.0)将其拆分为独立扩展模块,必须通过
✅ 正确配置如下(适配 Surefire 3.1.0 + Spring Boot 3):
<plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-surefire-plugin</artifactid><version>3.1.0</version><configuration><suitexmlfiles><suitexmlfile>src/test/resources/testng.xml</suitexmlfile></suitexmlfiles><!-- 可选:启用详细日志辅助诊断 --><trimstacktrace>false</trimstacktrace></configuration><dependencies><dependency><groupid>org.apache.maven.surefire</groupid><artifactid>surefire-testng</artifactid><version>3.1.0</version></dependency></dependencies></plugin>
⚠️ 注意事项:
-
版本严格对齐:surefire-testng 的
必须与 maven-surefire-plugin 主版本一致(如 3.1.0),否则可能引发 NoClassDefFoundError 或 IncompatibleClassChangeError; -
JDK 兼容性:确保使用 JDK 17+(Spring Boot 3 的最低要求),并验证 testng.xml 中
的 parallel、thread-count 等属性与 TestNG 7.8+(推荐)兼容; - 验证方式:执行 mvn clean test -Dtest=*.class(强制触发单个测试)或检查 Surefire 日志中是否出现 Running TestNG suite 字样,确认配置生效。
总结:这不是 Spring Boot 3 的“限制”,而是 Surefire 插件现代化设计的必然结果。只需为 maven-surefire-plugin 补充 surefire-testng 依赖,即可无缝延续 testng.xml 的灵活测试组织方式,无需重构测试结构或切换至 JUnit。











