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

Android/Kotlin项目中Kover与Sonar统计代码覆盖率数值不一致问题

Kover覆盖率结果与Sonar展示不一致的排查方向
  • 统计范围不匹配
    Kover默认仅统计项目源码目录下的业务代码,若Sonar未配置排除规则,会将自动生成的代码、测试代码、常量类、DTO、启动类等无需覆盖的文件计入总代码基数,拉低最终覆盖率。需要同时在Kover和Sonar中配置一致的排除规则,Sonar侧对应配置为sonar.coverage.exclusions。
  • 报告路径匹配错误(多模块项目常见)
    多模块Gradle项目中,如果仅配置了根项目的Kover报告路径,Sonar无法匹配各子模块的源码路径,会将未匹配到的类全部判定为未覆盖。需要将所有子模块的Kover报告路径都配置到sonar.coverage.jacoco.xmlReportPaths参数中,示例如下:
    property "sonar.coverage.jacoco.xmlReportPaths", project.subprojects.collect { "${it.buildDir}/reports/kover/report.xml" }.join(",")
    
  • Kover版本兼容性问题
    你使用的0.4.2版本Kover属于早期版本,生成的Jacoco格式XML报告存在字段缺失、格式不标准的问题,Sonar解析时会出现统计遗漏的情况。建议升级Kover到0.5.0及以上版本,该版本对Jacoco格式的兼容性有大幅优化。
  • 编译路径配置错误
    Sonar解析覆盖率报告需要匹配编译后的字节码文件,如果未正确配置sonar.java.binaries参数,Sonar无法对应源码和覆盖率数据,会将匹配失败的类判定为未覆盖,拉低整体覆盖率。
  • 报告未及时更新
    虽然你配置了sonarqube任务依赖koverReport,但若Gradle开启了任务缓存,可能出现Kover报告未随代码变更重新生成的情况,可执行./gradlew clean sonarqube命令清理缓存后重新执行任务验证。
  • 覆盖率统计维度差异
    若项目存在单元测试、集成测试多套测试用例,Kover的33%可能是合并了所有测试的覆盖结果,而你仅同步了单元测试的覆盖率报告到Sonar,导致Sonar统计值偏低。需要确认Kover生成报告前是否执行了所有测试任务,或者配置Kover合并多套测试的覆盖率数据后再同步到Sonar。

内容的提问来源于stack exchange,提问作者Zoo_M-0

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:24:05