使用JaCoCo插件的SonarQube能否分开查看单元与集成测试覆盖率?
在SonarQube+JaCoCo中分开查看单元/集成测试覆盖率
当然可以!在SonarQube搭配JaCoCo的场景下,完全能分开查看单元测试和集成测试的覆盖率——关键是要把两类测试的覆盖率数据分开生成,再告诉SonarQube分别对应哪份报告就行。下面是具体的实现步骤:
1. 分开生成两类测试的JaCoCo覆盖率数据
首先得让JaCoCo为单元测试和集成测试分别生成独立的覆盖率文件:
- 单元测试:一般构建工具(比如Maven/Gradle)的默认测试任务(Maven的
test阶段、Gradle的test任务)会自动触发单元测试,JaCoCo默认会生成对应的覆盖率数据文件(比如Maven下是target/jacoco/jacoco.exec,Gradle下是build/jacoco/test.exec)。 - 集成测试:需要单独配置集成测试的构建任务(比如Maven的
verify阶段、Gradle的integrationTest自定义任务),同时指定JaCoCo为这个任务生成独立的覆盖率文件,比如输出到target/jacoco/jacoco-it.exec(Maven)或build/jacoco/integrationTest.exec(Gradle)。
2. 配置SonarQube扫描参数
执行SonarQube扫描时,要明确指定两类覆盖率文件的路径,让SonarQube能区分开单元和集成测试的覆盖率:
Maven示例
可以在命令行添加参数,或者在pom.xml的SonarQube插件配置里指定:
mvn sonar:sonar \ -Dsonar.java.coveragePlugin=jacoco \ -Dsonar.jacoco.reportPaths=target/jacoco/jacoco.exec \ -Dsonar.jacoco.itReportPaths=target/jacoco/jacoco-it.exec
Gradle示例
在build.gradle的SonarQube配置块中添加参数:
sonarqube { properties { property "sonar.java.coveragePlugin", "jacoco" property "sonar.jacoco.reportPaths", "build/jacoco/test.exec" property "sonar.jacoco.itReportPaths", "build/jacoco/integrationTest.exec" } }
注意:如果是SonarQube 9.x及以上的新版本,部分参数名称可能调整为
sonar.jacoco.xmlReportPaths,需要对应改成XML格式的报告路径,具体可以参考对应版本的配置要求。
3. 在SonarQube界面查看分开的覆盖率
扫描完成后,进入项目的SonarQube页面:
- 在项目Overview页的覆盖率统计卡片里,你会看到总覆盖率,点击卡片进入详情页。
- 在Coverage详情页的顶部,有一个下拉菜单,可以切换选择Unit Tests Coverage和Integration Tests Coverage,两类测试的行覆盖率、分支覆盖率等细分指标会分别展示,一目了然。
内容的提问来源于stack exchange,提问作者CR Sardar
相关产品推荐
相关产品推荐

