J'ai un projet avec jacoco et je veux pouvoir filtrer certaines classes et/ou packages.
J'ai lu la documentation suivante:
Officiel jacoco site: http://www.eclemma.org/jacoco/index.html =
Officiel jacoco docs pour gradle : https://gradle.org/ docs/current/userguide/jacoco_plugin.html
Officiel jacocoGithub
numéros, travaillant sur la couverture: https://github.com/jacoco/jacoco/wiki/FilteringOptionshttps://github.com/jacoco/jacoco/issues/14
JaCoCo & Gradle - Options de filtrage (Pas de réponse)
Exclure les paquets du rapport Jacoco en utilisant Sonarrunner et Gradle (Ne pas utiliser sonar )
JaCoCo - exclut JSP du rapport (Il semble fonctionner pour maven , j'utilise gradle )
Configuration Maven Jacoco - Exclure les classes/packages du rapport ne fonctionnant pas (Il semble fonctionner pour maven , j'utilise gradle )
exclu du plugin JaCoCo gradle (Impossible que cela fonctionne)
Gradle Jacoco - les rapports de couverture incluent les classes exclues de la configuration (semble très proche, il utilisait doFirst
, ne fonctionnait pas pour moi)
apply plugin: 'Java'
apply plugin: 'jacoco'
buildscript {
repositories {
mavenCentral()
jcenter()
}
}
repositories {
jcenter()
}
jacocoTestReport {
reports {
xml {
enabled true // coveralls plugin depends on xml format report
}
html {
enabled true
}
}
test {
jacoco {
destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
classDumpFile = file("$buildDir/jacoco/classpathdumps")
excludes = ["projecteuler/**"] // <-- does not work
// excludes = ["projecteuler"]
}
}
}
Comment puis-je exclure certains packages et classes lors de la génération des rapports de couverture jacoco ?
Yannick Welsch
:Après recherche sur Google, lecture des documents Gradle et consultation des anciens messages de StackOverflow, j'ai trouvé cette réponse sur les forums de officiels gradle !
jacocoTestReport {
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, exclude: 'com/blah/**')
})
}
}
Source: https://issues.gradle.org/browse/GRADLE-2955
build.gradle
pour les projets Java/Groovy:apply plugin: 'Java'
apply plugin: 'jacoco'
jacocoTestReport {
reports {
xml {
enabled true // coveralls plugin depends on xml format report
}
html {
enabled true
}
}
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it,
exclude: ['codeeval/**',
'crackingthecode/part3knowledgebased/**',
'**/Chapter7ObjectOrientedDesign**',
'**/Chapter11Testing**',
'**/Chapter12SystemDesignAndMemoryLimits**',
'projecteuler/**'])
})
}
}
Comme vous pouvez le constater, j’ai pu ajouter plus de choses à exclude:
afin de filtrer quelques paquets.
Source: https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle
apply plugin: 'jacoco'
task jacocoReport(type: JacocoReport) {
reports {
xml {
enabled true // coveralls plugin depends on xml format report
}
html {
enabled true
}
}
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it,
exclude: ['codeeval/**',
'crackingthecode/part3knowledgebased/**',
'**/Chapter7ObjectOrientedDesign**',
'**/Chapter11Testing**',
'**/Chapter12SystemDesignAndMemoryLimits**',
'projecteuler/**'])
})
}
}
Pour Gradle version 5.0 et ultérieure, la classDirectories = files(...)
donne un avertissement concernant la désapprobation. C'est la manière non obsolète d'exclure des classes:
jacocoTestReport {
afterEvaluate {
classDirectories.setFrom(files(classDirectories.files.collect {
fileTree(dir: it, exclude: 'com/exclude/**')
}))
}
}
pour moi, c'est bien de travailler avec
test {
jacoco {
excludes += ['codeeval/**',
'crackingthecode/part3knowledgebased/**',
'**/Chapter7ObjectOrientedDesign**',
'**/Chapter11Testing**',
'**/Chapter12SystemDesignAndMemoryLimits**',
'projecteuler/**']
}
}
comme indiqué dans la documentation https://docs.gradle.org/current/userguide/jacoco_plugin.html#N16E62 et initialement demandé, la réponse est:
donc si vous me demandez: ce n'est pas une question de
excludes = ["projecteuler/**"]
ou
excludes += ["projecteuler/**"]
mais
excludes = ["**/projecteuler/**"]
exclure un paquet *.projecteuler.*
et test {}
au niveau du projet, non imbriqué dans jacocoTestReport
Ici est une solution à ce problème dans ANT. Ceci peut être adapté en ajoutant le suivant sous la tâche jacocoTestReport
. Bien que cela ne soit pas vraiment documenté par jacoco, cela semble être le seul moyen de filtrer les résultats des tests pour le moment.
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, exclude: 'excluded/files/**')
})
}
Cela fait longtemps que je ne le vois pas, mais je viens de le découvrir. Je me débattais avec toutes les exclusions nécessaires. J'ai trouvé que c'était quelque chose de beaucoup plus simple pour moi. Si vous suivez les styles de présentation de projet Maven/src/main/Java et/src/test/Java, il vous suffit de saisir buildDir/classes/ main dans votre classDirectories config comme suit:
afterEvaluate {
jacocoTestReport {
def coverageSourceDirs = ['src/main/Java']
reports {
xml.enabled false
csv.enabled false
html.destination "${buildDir}/reports/jacocoHtml"
}
sourceDirectories = files(coverageSourceDirs)
classDirectories = fileTree(
dir: "${project.buildDir}/classes/main",
excludes: [
//whatever here like JavaConfig etc. in /src/main/Java
]
)
}
}
Le code ci-dessous exclut également les classes de la vérification de la couverture:
jacocoTestCoverageVerification {
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: "${project.buildDir}/classes/main",
exclude: ['**/packagename/**'])
})
}
}