如何使用jacoco生成代码覆盖率报告,其中源代码和测试位于不同的项目中?

时间:2014-11-01 10:58:50

标签: maven testng code-coverage pom.xml jacoco

我在某个文件夹中有一个maven java项目(它有一些单元测试),并在另一个不同的项目(不同的目录)中测试相同的代码。源代码和测试共享相同的父pom。现在我想使用JaCoCo生成代码覆盖率报告。

如何测量来源?如何在检测代码上运行测试?以及如何整合并获得结果报告?

Say Project ABC包含代码,项目XYZ包含测试用例。 注意:

  1. 项目ABC和项目XYZ是独立项目
  2. ABC和XYZ都包含多个子项目(需要集成所有内容)。

2 个答案:

答案 0 :(得分:0)

我有类似的问题。我通过改变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将报告写入多模块项目的基本目录。声纳插件找到并分析它们。

答案 1 :(得分:0)

在构建具有多个子模块的“参考应用程序”并尝试为子模块生成测试覆盖率并将它们推送到声纳库时,我遇到了问题。我遇到的问题是,由于子模块之间相互引用,因此生成的jacoco报告被覆盖,最终我得到了单个模块的结果。这可能与上面发布的问题不同,但是我确实通过在gradle中使用“追加”解决了这个问题,所以只想展示如何做到这一点。

在每个模块的build.gradle文件中,我有:

    testOptions {
        unitTests.returnDefaultValues = true
        unitTests.includeAndroidResources = true
        unitTests.all {
            jacoco {
                append = true
                includeNoLocationClasses = true
            }
            systemProperty 'robolectric.enabledSdks', '28'
        }
    }

s