You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至Spring Boot 3后测试覆盖率为0%的问题求助

Spring Boot 3升级后SonarQube显示JUnit测试覆盖率0%的排查方案

1. 调整Jacoco报告生成阶段

你的Jacoco插件将report目标绑定到了post-integration-test阶段,但JUnit单元测试是在test阶段执行的,这会导致Jacoco无法正确捕获单元测试的覆盖数据(集成测试阶段的执行数据不会包含单元测试内容)。

修改Jacoco插件的coverage-report执行阶段为verify(单元测试完成后的阶段):

<execution>
    <id>coverage-report</id>
    <phase>verify</phase> <!-- 替换原post-integration-test -->
    <goals>
        <goal>report</goal>
    </goals>
</execution>

2. 确保SonarQube正确读取Jacoco报告

SonarQube需要明确指定Jacoco报告路径才能加载覆盖数据,在sonar-maven-plugin中添加以下配置:

<plugin>
    <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.9.1.2184</version> <!-- 适配你的Sonar版本 -->
    <configuration>
        <!-- 指定Jacoco XML报告路径(Jacoco 0.8.7+推荐使用XML格式) -->
        <sonar.jacoco.xmlReportPaths>${project.build.directory}/jacoco/jacoco.xml</sonar.jacoco.xmlReportPaths>
    </configuration>
</plugin>

同时确保Jacoco生成XML格式报告,可在report目标中补充配置:

<execution>
    <id>coverage-report</id>
    <phase>verify</phase>
    <goals>
        <goal>report</goal>
    </goals>
    <configuration>
        <formats>
            <format>XML</format>
            <format>HTML</format> <!-- 保留HTML方便本地查看 -->
        </formats>
    </configuration>
</execution>

3. 规范Azure Pipeline的Maven执行顺序

在Azure Pipeline的任务中,必须保证Maven命令按以下顺序执行,确保Jacoco代理全程捕获测试数据:

mvn clean test jacoco:report sonar:sonar

避免拆分命令(比如单独执行test再执行sonar:sonar),这会导致Jacoco的代理上下文丢失,无法生成有效覆盖数据。

4. 修复Mockito版本兼容性问题

你使用的Mockito 4.1.0与JUnit 5.9.2、Spring Boot 3.2.5存在版本兼容冲突,Spring Boot 3.2.x默认依赖Mockito 5.x,升级Mockito版本到5.11.0或以上:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>5.11.0</version>
    <scope>test</scope>
</dependency>

版本不兼容可能导致部分测试未正常执行,间接导致覆盖率显示为0。

5. 本地验证覆盖数据生成

在本地执行mvn clean test jacoco:report,查看target/site/jacoco目录下的HTML报告:

  • 如果本地报告也显示覆盖率0,说明问题出在测试执行或Jacoco配置,而非SonarQube集成
  • 检查Maven控制台输出的测试数量,确认测试类是否被正确执行
  • 确保测试类命名符合Maven默认规则(以Test结尾或位于src/test/java目录下)

内容的提问来源于stack exchange,提问作者user2176576

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:34:54