Golang项目SonarQube代码覆盖率显示0%,如何解决?
解决Golang项目SonarQube代码覆盖率显示0%的问题
核心排查与修复步骤
1. 修正测试文件排除规则(关键问题)
你的sonar.test.exclusions配置中包含了**/*_test.go,这会让SonarQube完全忽略所有Go测试文件,导致它无法将覆盖率报告中的数据与业务代码关联,直接显示0%覆盖率。
- 修复:从
sonar.test.exclusions中移除**/*_test.go,仅保留真正需要排除的非测试文件路径。修正后的配置示例:sonar.projectKey= * Project key * sonar.projectName=* Name Project * sonar.sources=. sonar.test.exclusions=**/proto/**, **/*mock.js, **/*.php, **/config/**, **/model/**, **/container/**, **/util/**, **/mocks/**, **/module/** sonar.go.coverage.reportPaths=coverage.out
2. 确保覆盖率报告正确生成
- 执行Go测试命令生成标准覆盖率报告:
go test ./... -coverprofile=coverage.out - 检查项目根目录是否存在
coverage.out文件,若生成在其他路径,需同步修改sonar.go.coverage.reportPaths的路径值(比如./build/coverage.out)。
3. 验证覆盖率报告的有效性
本地执行以下命令查看报告内容,确认是否有实际覆盖率数据:
go tool cover -func=coverage.out
如果输出中所有文件的覆盖率均为0,说明你的测试用例没有覆盖业务代码,需要补充测试逻辑。
4. 确认扫描顺序正确
必须先执行生成覆盖率报告的go test命令,再运行SonarQube扫描命令(如sonar-scanner),否则扫描时coverage.out尚未生成,会导致覆盖率显示0%。
内容的提问来源于stack exchange,提问作者andre widianto
相关产品推荐
相关产品推荐

