2013-06-30 45 views
9

我向项目添加了一组没有测试的来源,我不希望它们破坏我的测试覆盖率统计信息。Gradle 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类

有人可以帮助我:我在接下来的方式配置Jacoco?

编辑

一些调试之后,似乎所有默认的输出被添加到org.gradle.testing.jacoco.tasks.JacocoReport#classDirectories在一个私有方法org.gradle.testing.jacoco.plugins.JacocoPlugin#addDefaultReportTasks

,使用这种代码的时候是可见的:

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类?

回答

10

好了,找到了一个解决办法:

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

这样就会覆盖JacocoPlugin类设置classDirectories。

+0

这是否仅包括tho se classDirectories? –

+0

对不起,很久以前,我没有及时了解项目的最新状态。 – StKiller

+0

我最终在这里问自己的问题:http://stackoverflow.com/questions/29887805/filter-jacoco-coverage-reports-with-gradle。 –

-1

如果您有

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 
相关问题