gradle - 如何使用Gradle从JaCoCo测试报告中排除隐式Groovy闭包类

标签 gradle groovy closures code-coverage jacoco

如果在Groovy项目上使用JaCoCo,则在覆盖率报告中会得到很多隐式创建的闭包类。链接到它们的源是封闭的类。封闭类的coverage报告还包含闭包coverage,因此它不会为coverage报告添加任何值。更糟糕的是,它伪造了承保范围报告,因为在封闭统计中要涵盖的结单在整个统计中被计算两次。

那么,如何从生成的JaCoCo覆盖率报告中排除那些关闭?

最佳答案

您可以使用以下代码段从JaCoCo记录中排除隐式闭包类,这不会阻止将语句记录在闭包类中

test {
    jacoco.excludes = ['**/*$*_closure*']
}

使用该摘要,不再记录覆盖范围,但是现在所有关闭都在报告中显示为0%覆盖范围,因此也减少了总体覆盖范围统计信息。

添加以下代码段将从JaCoCo报告中删除闭包类,从而也将提供更有意义的总体统计信息。上面的代码段并不是必需的,它只是带来了一点性能改进,因为不需要为报告记录和转换覆盖范围,因此我建议同时使用这两个代码段。
jacocoTestReport {
    doFirst {
        classDirectories = classDirectories.collect { fileTree(it) { exclude '**/*$*_closure*' } }.sum()
    }
}

如果您有多个TestJacocoReport任务要通过这种方式进行修改,那么当然也可以像
tasks.withType(Test) {
    jacoco.excludes = ['**/*$*_closure*']
}

tasks.withType(JacocoReport) {
    doFirst {
        classDirectories = classDirectories.collect { fileTree(it) { exclude '**/*$*_closure*' } }.sum()
    }
}

关于gradle - 如何使用Gradle从JaCoCo测试报告中排除隐式Groovy闭包类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39453696/

相关文章:

python - 我可以恢复闭包包含 Python 循环的函数吗?

Gradle复制而不会覆盖

Android.mk *** 缺少分隔符。停止。预建库的 LOCAL_SRC_FILES 应该只包含一个项目

maven - 在带有 java src 和 groovy 测试的项目中将 groovy 代码放在哪里,以便仅在 groovy 测试中使用它们?

尝试在换行符上拆分时,Groovy 返回错误

swift - 我可以让#selector 引用 Swift 中的闭包吗?

java - ERROR : Unable to start the daemon process. 此问题可能是由于守护程序配置不正确造成的

安卓 Gradle Jacoco : offline instrumentation for integration tests

binding - 有没有办法将所有定义的变量传递给 GroovyShell?

javascript - Javascript 循环内的事件处理程序 - 需要闭包吗?