gradle jacoco with integration测试和排除



我正在使用 gradle jacoco 插件来获取测试和集成测试的覆盖率报告。集成测试的源是使用测试集插件定义的。 为了在报告中同时涵盖测试和集成测试,我从这篇文章中推断出,我应该在 *.exec 文件中调用带有包含的 executionData。现在,我试图弄清楚如何从jacoco报告(和分析(中排除单个类。使用 Gradle 过滤 JaCoCo 覆盖率报告以使用 afterEvaluate 并更改 classDirectory,但在我使用它时会生成一个空报告。

plugins {
id 'org.unbroken-dome.test-sets' version '1.5.0'
}
apply plugin: 'java'
apply plugin: 'jacoco'
sourceSets {
main {
java {
srcDirs = ['jsrc']
}
}
}
testSets {
integrationTest {
dirName = 'integration-test'
}
}
jacocoTestReport {
executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")
// commented because causes the report to be empty
//afterEvaluate {
//    classDirectories = files(classDirectories.files.collect {
//        fileTree(dir: it, exclude: ['**/TheOneClassToExclude.*'])
//    })
//}
}

如果这很重要,我将 gradle 4.4 与 JDK7 一起使用。

在深入研究之后:

  • 我意识到 build/classes/java 中的类文件在每次 jacoTestReport 运行后都会被清除。
  • 在我提到的帖子中更仔细地研究如何使用executionData,我决定明确定义jacoTestReport源代码集:sourceSets sourceSets.main它几乎解决了我遇到的所有问题。不再擦除构建/类中的文件。
  • 面临的最后一个问题是由我的排除规则不排除我想要的特定类引起的。我指定了包的整个路径(在我的情况下,该包仅包含类(,这也解决了这个问题。

固定构建:

plugins {
id 'org.unbroken-dome.test-sets' version '1.5.0'
}
apply plugin: 'java'
apply plugin: 'jacoco'
sourceSets {
main {
java {
srcDirs = ['jsrc']
}
}
}
testSets {
integrationTest {
dirName = 'integration-test'
}
}
jacocoTestReport {
sourceSets sourceSets.main    // important!
executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, exclude: ['**/path/to/package/*'])
})
}
}

最新更新