Maven项目Surefire插件显示0测试、Jacoco覆盖率为0排查咨询
检查Surefire插件的测试类匹配规则
默认情况下,Surefire仅识别命名符合**/Test*.java、**/*Test.java、**/*Tests.java、**/*TestCase.java的测试类。如果你的测试类命名不符合该规则,要么修改类名适配默认规则,要么在Surefire配置中通过<includes>指定自定义测试类路径,示例配置:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <configuration> <includes> <include>**/*CustomTest.java</include> </includes> </configuration> </plugin>确认测试类的注解与结构规范
测试类必须包含对应测试框架的合法注解(如JUnit 4/JUnit 5的@Test),且测试方法需为public修饰、无返回值。若测试类为抽象类,或测试方法不符合上述规范,Surefire会直接跳过执行。验证Jacoco插件的绑定阶段与核心配置
Jacoco需要绑定到正确的Maven生命周期阶段才能收集测试数据,通常需配置prepare-agent目标(用于启动收集代理)和report目标(用于生成报告)。检查pom.xml中的Jacoco配置,确保关联逻辑正确,示例配置:<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.10</version> <executions> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin>若缺失
prepare-agent配置,Jacoco无法收集测试执行数据,最终覆盖率必然为0。检查Maven命令的执行阶段完整性
确保执行的Maven命令包含test阶段,例如mvn clean test jacoco:report。若仅执行mvn compile或未绑定test阶段的mvn package,或直接单独执行jacoco:report,都会因未触发测试执行导致无数据生成。排查测试类的编译与路径问题
确认测试类已被正确编译到target/test-classes目录。若测试类被错误放置在src/main/java(而非src/test/java),或Maven配置中修改了测试源码路径但未正确配置,Surefire将无法找到测试类,进而显示测试数为0。检查依赖冲突或测试框架版本兼容性
若项目中同时存在JUnit 4和JUnit 5依赖,可能导致测试执行异常;或Surefire插件版本过低(如2.x版本),无法适配你使用的测试框架版本(如JUnit 5)。建议升级Surefire至最新稳定版,并统一测试框架依赖版本。查看Maven debug日志定位细节
执行mvn clean test -X开启debug日志,重点查看Surefire相关输出,确认是否存在“找不到测试类”“测试类被跳过”等提示,同时检查Jacoco是否正常启动代理。日志中的具体错误信息可直接定位问题根源。
内容的提问来源于stack exchange,提问作者user2636464

