【问题标题】:How to generate the code coverage report using jacoco where source code and tests are in different projects?如何使用 jacoco 生成代码覆盖率报告,其中源代码和测试位于不同的项目中?
【发布时间】:2014-12-28 14:18:18
【问题描述】:
我在某个文件夹中有一个 maven java 项目(它有一些单元测试),并在另一个不同的项目(不同的目录)中测试相同的代码。源代码和测试共享同一个父 pom。现在我想使用 JaCoCo 生成代码覆盖率报告。
如何检测源?如何在检测代码上运行测试?以及如何整合得到结果报告?
假设项目 ABC 包含代码,项目 XYZ 包含测试用例。
注意:
- Project ABC 和 Project XYZ 是独立的项目
- ABC 和 XYZ 都包含多个子项目(需要集成所有内容)。
【问题讨论】:
标签:
maven
testng
code-coverage
pom.xml
jacoco
【解决方案1】:
我遇到了类似的问题。我通过更改jacoco报告路径的路径找到了解决方案:
<sonar.surefire.reportsPath>${project.basedir}/../target/surefire-reports</sonar.surefire.reportsPath>
<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
我添加了这些属性并将 jacoco 插件配置为附加报告而不是通过以下方式覆盖它们:
<configuration>
<append>true</append>
</configuration>
这样 jacoco 将报告写入多模块项目的基本目录。声纳插件会找到这些并分析它们。
【解决方案2】:
在构建具有多个子模块的“参考应用程序”并尝试为子模块生成测试覆盖率并将它们推送到 sonarqube 时,我遇到了问题。我遇到的问题是,由于子模块相互引用,因此生成的 jacoco 报告被覆盖,我最终会得到单个模块的结果。这可能与上面发布的问题不同,但我确实通过在 gradle 中使用“追加”解决了它,所以只想展示如何做到这一点。
在每个模块的 build.gradle 文件中,我有:
testOptions {
unitTests.returnDefaultValues = true
unitTests.includeAndroidResources = true
unitTests.all {
jacoco {
append = true
includeNoLocationClasses = true
}
systemProperty 'robolectric.enabledSdks', '28'
}
}
s