2013-06-30 6 views
9

Ich habe zu einem Projekt eine Reihe von Quellen hinzugefügt, die keine Tests haben, und ich will nicht, dass sie meine Testabdeckung Statistiken verderben. Ich konfigurierte Jacoco im nächsten Weg:Gradle Jacoco - Berichterstattung umfasst Klassen in der Konfiguration ausgeschlossen

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

Aber wie auch immer, wenn Sie den Bericht zu erzeugen, Jacoco enthält auch Klassen aus org.bla

Kann mir jemand helfen?

EDIT

Nach einigen Debugging, scheint es, dass alle Standardausgänge org.gradle.testing.jacoco.tasks.JacocoReport#classDirectories in einer privaten Methode hinzugefügt werden org.gradle.testing.jacoco.plugins.JacocoPlugin#addDefaultReportTasks

, die sichtbar ist, wenn ein solcher Code verwenden:

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

So - die Frage ist: ist es möglich, irgendwie org.gradle.testing.jacoco.plugins.JacocoPlugin#addDefaultReportTasks Methode überschreiben oder überschreiben komplett org.gradle.testing.jacoco.plugins.JacocoPlugin Klasse?

Antwort

10

Ok, fand eine Abhilfe:

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

Dies überschreibt classDirectories gesetzt durch JacocoPlugin Klasse.

+0

Ist dies nur tho se 'classDirectories'? –

+0

Sorry, es war lange her, ich bin nicht auf dem neuesten Stand des Projekts. – StKiller

+0

Ich landete meine eigene Frage hier: http://StackOverflow.com/Questions/29887805/Filter-Jacoco-Coverage-Reports-with-gradle. –

-1

Wenn Sie einen Aufgabenname etwas anderes haben als

test 

, die Unit-Tests ausgeführt wird, sollen Sie in der Lage sein, den Bericht zu generieren, die folgende Aufgabe zu Ihrer build.gradle Datei:

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

Dies muss explizit nach der Task aufgerufen werden, um Komponententests auszuführen, z. B .: