2013-06-30 9 views
9

Ho aggiunto a un progetto un insieme di fonti che non hanno test e non voglio che rovinino le statistiche di copertura del test. Ho configurato Jacoco nel modo seguente:Grado Jacoco - i rapporti di copertura includono classi escluse nella configurazione

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

Ma in ogni caso, quando si genera il report, Jacoco comprende anche lezioni da org.bla

qualcuno può aiutarmi?

EDIT

Dopo un po 'di debug, sembra che tutte le uscite di default sono aggiunti a org.gradle.testing.jacoco.tasks.JacocoReport#classDirectories in un metodo privato org.gradle.testing.jacoco.plugins.JacocoPlugin#addDefaultReportTasks

che è visibile quando si utilizza tale codice:

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

Quindi - la domanda è: è possibile sovrascrivere in qualche modo il metodo org.gradle.testing.jacoco.plugins.JacocoPlugin#addDefaultReportTasks, o sovrascrivere completamente la classe org.gradle.testing.jacoco.plugins.JacocoPlugin?

risposta

10

Ok, trovato una soluzione:

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

Questo sovrascrive classDirectories fissati per classe JacocoPlugin.

+0

Questo include solo se 'classDirectories'? –

+0

Siamo spiacenti, è stato molto tempo fa, non sono aggiornato con l'ultimo stato del progetto. – StKiller

+0

Ho finito per fare la mia domanda qui: http://stackoverflow.com/questions/29887805/filter-jacoco-coverage-reports-with-gradle. –

-1

Se si dispone di una nomi delle attività qualcosa di diverso

test 

che corre test di unità, si dovrebbe essere in grado di generare il report aggiungendo il seguente compito al file 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' 
    } 
} 

Questo deve essere chiamato esplicitamente dopo l'esecuzione dei test unitari, ad esempio:

gradle unitTest jacocoTestReport