【发布时间】:2017-07-07 21:55:51
【问题描述】:
我目前正在使用具有良好覆盖率的 gradle 多模块 java 项目和带有 sonarJava 插件 4.10.0.1026 的 sonarqube 6.2。我正在使用 Gradle 4.0.1、sonarqube 插件 2.5 和 jacoco 0.7.9!代码是java 8。
由于 API 驱动开发,API 测试被编写为 API 项目中的抽象测试,并从为测试提供构造函数的实现项目中调用。
在 sonarqube 服务器上分析项目时,正确测量了实施项目的覆盖率,但 IMPL 项目测试中包含的 API 项目的覆盖率仅为 0.0%。这些项目的覆盖结果将被忽略。
当简单地使用 jacoco 插件时,我能够获得相同的行为。在做了一些研究后,我找到了获得正确 jacoco 报告的解决方案:
task codeCoverageReport(type: JacocoReport) {
description "Creates a unified JaCoCo test report for the project."
// Gather execution data from all subprojects
// (change this if you e.g. want to calculate unit test/integration test coverage separately)
executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")
// Add all relevant sourcesets from the subprojects
subprojects.each {
sourceSets it.sourceSets.main
}
reports {
xml.enabled true
html.enabled true
html.destination file("${buildDir}/reports/jacoco")
csv.enabled false
}
}
// always run the tests before generating the report
codeCoverageReport.dependsOn {
subprojects*.test
}
我目前的结果如下:
贾可可:
- JaCoCo(codeCoverageReport-任务)
- 73% 指令覆盖率
- 91% 的分支机构覆盖率
- 声纳
- 43.1% 的线路覆盖率(计算中仅考虑约 30% 的线路!)
- 82.1% 条件覆盖(仅覆盖约 20% 条件!)
所以声纳中的覆盖结果不可用。我已经阅读了一篇宣布从 sonar 6.2 开始的“sonar.jacoco.reportPaths”参数的帖子,我认为 java-analyzer 4.4 或 sth。像那样。将此参数添加到我的 gradle 构建脚本时,该脚本不再编译。通过声纳项目管理将 jacoco .exec 文件添加到声纳时,没有任何变化。
如果有一种方法可以管理声纳以计算正确的覆盖范围,那就太好了。
【问题讨论】:
标签: java gradle sonarqube code-coverage jacoco