2013-06-30 3 views
9

Я добавил в проект набор источников, которые не имеют тестов, и я не хочу, чтобы они испортили мою статистику охвата тестирования. Я настроил Jacoco следующим способом: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

Может кто-нибудь мне помочь?

EDIT

После некоторой отладки, оказывается, что все выходы по умолчанию добавляются 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') 
} 

Это переопределяет classDirectories установленные класса JacocoPlugin.

+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