如果在Groovy项目上使用JaCoCo,则在覆盖率报告中会得到很多隐式创建的闭包类。链接到它们的源是封闭的类。封闭类的coverage报告还包含闭包coverage,因此它不会为coverage报告添加任何值。更糟糕的是,它伪造了承保范围报告,因为在封闭统计中要涵盖的结单在整个统计中被计算两次。
那么,如何从生成的JaCoCo覆盖率报告中排除那些关闭?
最佳答案
您可以使用以下代码段从JaCoCo记录中排除隐式闭包类,这不会阻止将语句记录在闭包类中
test {
jacoco.excludes = ['**/*$*_closure*']
}
使用该摘要,不再记录覆盖范围,但是现在所有关闭都在报告中显示为0%覆盖范围,因此也减少了总体覆盖范围统计信息。
添加以下代码段将从JaCoCo报告中删除闭包类,从而也将提供更有意义的总体统计信息。上面的代码段并不是必需的,它只是带来了一点性能改进,因为不需要为报告记录和转换覆盖范围,因此我建议同时使用这两个代码段。
jacocoTestReport {
doFirst {
classDirectories = classDirectories.collect { fileTree(it) { exclude '**/*$*_closure*' } }.sum()
}
}
如果您有多个
Test
和JacocoReport
任务要通过这种方式进行修改,那么当然也可以像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/