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
相关产品推荐
相关产品推荐

