配置 jacocoTestReport 以读取多个 .exec 文件作为输入

Mat*_*ttG 2 java gradle jacoco jacoco-plugin

在我的 gradle 版本中,我有 2 个这样的测试任务:

task testAAA(type: Test) {
    filter {

        includeTestsMatching "*AAA*"
    }

    finalizedBy jacocoTestReport
}
Run Code Online (Sandbox Code Playgroud)

task testBBB(type: Test) {
    filter {

        includeTestsMatching "*BBB*"
    }

    finalizedBy jacocoTestReport
}
Run Code Online (Sandbox Code Playgroud)

这会在 build/jacoco 中生成 2 个 .exec 文件:

  • 测试AAA.exec

  • testBBB.exec

我想生成一个单一的覆盖率报告,它从两个/所有 .exec 文件中获取输入,我试过这个:

jacocoTestReport {
    executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")

    reports {
        xml.enabled true
    }

}
Run Code Online (Sandbox Code Playgroud)

当我尝试时,我收到此错误:

Execution failed for task ':Project1:jacocoTestReport'.
> Unable to read execution data file Project1/build/jacoco/test.exec

Project1/build/jacoco/test.exec (No such file or directory)

Run Code Online (Sandbox Code Playgroud)

当我明确提供 executionData 规范时,为什么 jacocoTestReport 寻找“test.exec”?

Lou*_*met 5

我建议传入测试任务而不是文件树。这将允许插件确保查找正确的文件并将解决一些可能发生的执行顺序问题,例如确保此报告任务测试任务本身之后运行。

所以像:

jacocoTestReport {
    executionData tasks.withType(Test)

    reports {
        xml.enabled true
    }
}
Run Code Online (Sandbox Code Playgroud)


Jos*_* M. 5

我为此挣扎了一段时间,甚至取得了成功。直到我昨天回来。花了几个小时搜索并在 GH 上找到了这个。

jacocoTestReport {
  getExecutionData().setFrom(fileTree(buildDir).include("/jacoco/*.exec")) 
}
Run Code Online (Sandbox Code Playgroud)

从 Gradle 6.0 开始,这是要走的路线。已经针对具有 2 组测试的 repo 对其进行了测试,我可以单独运行或同时运行,Jacoco 不会爆炸。

Jacoco JavaDocs
GH 问题与解决方案