无需操作src目录,如何配置Sonar统计单元+SCC测试覆盖率?
优雅解决SonarQube统计Spring Cloud Contract测试数量的问题
针对你遇到的SonarQube无法统计SCC生成测试的问题,其实不用折腾创建/删除src目录的方案,利用Gradle的sourceSets配置就能优雅解决——核心是让Gradle把SCC生成的测试源目录标记为官方测试源,这样SonarQube插件会自动识别并统计这些测试。
具体配置步骤
- 将SCC生成目录添加到Gradle测试源集
在你的build.gradle中添加以下配置,让Gradle把SCC生成的测试目录纳入测试源范围:
sourceSets { test { java { srcDirs += 'build/generated-test-sources/contracts' } } }
这样Gradle就会把build/generated-test-sources/contracts下的代码当作测试代码的一部分,SonarQube插件在扫描时会自动读取这个目录的测试,无需手动指定sonar.tests属性。
- 简化SonarQube配置
既然已经通过sourceSets指定了测试源,你可以简化sonarqube配置,去掉手动设置的sonar.sources和sonar.tests(SonarQube Gradle插件3.0版本会自动从Gradle的sourceSets中获取这些路径):
sonarqube { properties { property "sonar.host.url", "http://localhost" property "sonar.projectKey", "myProject" property "sonar.sourceEncoding", "UTF-8" property "sonar.login", "abracadabra" // 移除sonar.sources和sonar.tests,插件自动从sourceSets读取 } }
- 保留原有SCC基础配置
你的SCC核心配置可以原样保留,不需要修改生成目录:
contracts { baseClassForTests = "myProj.BaseTest" testMode = "EXPLICIT" testFramework = "JUNIT5" }
为什么这个方案更优雅?
- 完全遵循Gradle和SonarQube的集成规范,不需要hack式的创建/删除目录操作
- 配置简洁,依赖工具原生机制,后续版本升级也更稳定
- 自动同步测试源范围,无需手动维护
sonar.tests路径
版本兼容性验证
你使用的org.sonarqube 3.0和org.springframework.cloud.contract 2.2.3完全支持这个方案:
- SonarQube Gradle插件3.0已经实现了与Gradle sourceSets的深度集成,会自动扫描所有标记为测试源的目录
- SCC 2.2.3默认生成测试到
build/generated-test-sources/contracts,添加到sourceSets后能被正确识别
配置完成后,重新执行./gradlew sonarqube,Sonar Dashboard的Coverage区域就会同时统计单元测试和SCC生成的测试数量了。
内容的提问来源于stack exchange,提问作者Daemon2017
相关产品推荐
相关产品推荐

