【问题标题】:Gradle Jacoco - coverage reports includes classes excluded in configurationGradle Jacoco - 覆盖报告包括配置中排除的类
【发布时间】:2013-06-27 23:33:06
【问题描述】:

我向项目中添加了一组没有测试的源,我不希望它们破坏我的测试覆盖率统计信息。我用下一种方式配置了 Jacoco:

test {
    jacoco{
        excludes = ['org/bla/**']
        includes = ['com/bla/**']
        append = false
    }
}

jacocoTestReport {
    dependsOn test
    description = "Generate Jacoco coverage reports after running tests."
    reports {
        xml.enabled true
        html.enabled true
    }
    classDirectories = fileTree(dir: 'build/classes/main', include: 'com/bla/**')
    sourceDirectories = fileTree(dir: 'scr/main/java', include: 'com/bla/**')
}

但无论如何,在生成报告时,Jacoco 还包含来自 org.bla

的类

有人可以帮我吗?

编辑

经过一些调试,似乎所有默认输出都以私有方法org.gradle.testing.jacoco.plugins.JacocoPlugin#addDefaultReportTasks添加到org.gradle.testing.jacoco.tasks.JacocoReport#classDirectories

使用此类代码时可见:

jacocoTestReport {
    classDirectories = files('build/classes/main/com/bla')
    println("-----------------------------------------------------------")
    getAllClassDirs().each { File file ->
        println(file.absolutePath)
    }
    println("-----------------------------------------------------------")
    getAdditionalClassDirs().each{ File file ->
        println(file.absolutePath)
    }
}

jacocoTestReport << {
    println("-----------------------------------------------------------")
    getAllClassDirs().each { File file ->
        println(file.absolutePath)
    }
    println("-----------------------------------------------------------")
    getAdditionalClassDirs().each{ File file ->
        println(file.absolutePath)
    }
}

Output
-----------------------------------------------------------
<path_here>\build\classes\main\com\bla
-----------------------------------------------------------
....more text here
-----------------------------------------------------------
<path_here>\build\classes\main\com\bla
<path_here>\build\classes\main
<path_here>\build\resources\main
-----------------------------------------------------------

所以 - 问题是:是否可以以某种方式覆盖 org.gradle.testing.jacoco.plugins.JacocoPlugin#addDefaultReportTasks 方法,或完全覆盖 org.gradle.testing.jacoco.plugins.JacocoPlugin 类?

【问题讨论】:

    标签: gradle jacoco


    【解决方案1】:

    好的,找到了解决方法:

    jacocoTestReport.doFirst{
        classDirectories = files('build/classes/main/com/bla')
    }
    

    这会覆盖 JacocoPlugin 类设置的 classDirectories。

    【讨论】:

    • 这是否只包括classDirectories
    • 对不起,很久以前了,我没有及时了解项目的最新状态。
    • 我最终在这里问了我自己的问题:stackoverflow.com/questions/29887805/….
    【解决方案2】:

    如果您的任务名称不是

    test
    

    运行单元测试,您应该能够生成报告,将以下任务添加到您的 build.gradle 文件中:

    jacocoTestReport {
        group = "Reporting"
        description = "Generates Jacoco coverage reports for unit tests"
        executionData = files('build/jacoco/unitTest.exec')
        reports {
            html.destination = 'build/reports/coverage'
        }
    }
    

    这需要在运行单元测试的任务之后显式调用,例如:

    gradle unitTest jacocoTestReport
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 2018-09-22
      • 2015-08-24
      • 2018-07-27
      • 2019-04-10
      • 2015-03-04
      • 2015-01-17
      相关资源
      最近更新 更多