gradle jacoco与integrationTest和排除

时间:2018-06-19 16:03:56

标签: gradle jacoco

我正在使用gradle jacoco plugin获取测试和集成测试的覆盖率报告。集成测试的源由test-sets plugin定义。 为了使测试和集成测试都包含在报告中,我从this post推论出,我应该在* .exec文件上使用include来调用executeData。现在,我试图弄清楚如何从jacoco报告(和分析)中排除单个类。 Filter JaCoCo coverage reports with Gradle指向使用afterEvaluate并更改classDirectories,但这在我使用它时会生成一个空报告。

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一起使用。

1 个答案:

答案 0 :(得分:0)

深入研究之后:

  • 我意识到每次运行jacocoTestReport后,build / classes / java中的类文件都会被清除。
  • 更仔细地研究我提到的the post中如何使用executionData,我决定显式定义jacocoTestReport源集:sourceSets sourceSets.main,该源集解决了我遇到的几乎所有问题。不再清除构建/类中的文件。
  • 我遇到的最后一个问题是由我的排除规则导致的,该规则不排除我想要的特定班级。我指定了整个包的路径(在我的案例中,该包仅包含类),这也解决了该问题。

固定的build.gradle:

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/*'])
        })
    }
}