Problème:
J'ai un projet avec jacoco et je veux pouvoir filtrer certaines classes et / ou packages.
Documentation connexe:
J'ai lu la documentation suivante:
Officiel jacocosite: http://www.eclemma.org/jacoco/index.html
Officiel jacoco documents pour gradle: https://gradle.org/docs/current/userguide/jacoco_plugin.html
Officiel jacoco Github
problèmes, travail sur la couverture:
https://github.com/jacoco/jacoco/wiki/FilteringOptions
https://github.com/jacoco/jacoco/issues/14
Liens StackOverflow connexes:
JaCoCo & Gradle - Options de filtrage (pas de réponse)
Exclure les packages du rapport Jacoco à l'aide de Sonarrunner et Gradle (sans utilisersonar)
JaCoCo - exclure JSP du rapport (cela semble fonctionner pourMaven, J'utilise gradle)
Configuration Maven Jacoco - Exclure les classes / packages du rapport ne fonctionne pas (cela semble fonctionner pourMaven, J'utilise gradle)
Exclusion du plugin JaCoCo gradle (impossible de faire fonctionner cela)
Gradle Jacoco - les rapports de couverture incluent les classes exclues de la configuration (semble très proche, il a utilisé doFirst
, n'a pas fonctionné pour moi)
Exemple de ce que j'ai essayé:
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"]
}
}
}
Question:
Comment puis-je exclure certains packages et classes lors de la génération du jacoco rapports de couverture?
la source
packages
ligne en utilisantCodecov
? Aussi, j'ai vu leGithub
, qu'en est-il duAndroid
soutien, j'ai vuJava
. Je devrais encore avoir à vous envoyer tous les rapports puis filtrer après vs filtrage avant.excludes
de la documentation officielle fait faire alors? Est-ce à peu près inutile?excludes
n'est pas sur la tâche de couverture, mais sur la tâche de test. Il exclut les fichiers d'être instrumentés par JaCoCo et donc d'enregistrer la couverture. Vous pouvez l'utiliser si vous ne souhaitez pas enregistrer la couverture pour certaines classes, si vous ne pouvez pas en raison d'un conflit avec un autre agent d'instrumentation ou parce que vous avez pré-instrumenté des classes. Cela n'exclura pas une classe du rapport, surtout dans le dernier cas mentionné, ce serait une idée horrible.Réponses:
Merci à
Yannick Welsch
:Après avoir recherché Google, lu les documents Gradle et parcouru d'anciens articles StackOverflow, j'ai trouvé cette réponse sur le site officiel gradle forums!
Source: https://issues.gradle.org/browse/GRADLE-2955
Solution à mes
build.gradle
projets Java / Groovy:Comme vous pouvez le voir, j'ai réussi à en ajouter
exclude:
afin de filtrer quelques paquets.Source: https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle
Tâches personnalisées pour d'autres projets tels qu'Android:
Source: https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/quality.gradle#L59
la source
exclude: ['**/*Test*.*'])
jacocoTestReport
ne fonctionne qu'avec les pluginsjacoco
etjava
. Ce n'est pas pour Android. Veuillez voir mon dépôt ici pour Android: github.com/jaredsburrows/android-gradle-java-template/blobclassDirectories =
résultats dans cet avertissement.The JacocoReportBase.setClassDirectories(FileCollection) method has been deprecated. This is scheduled to be removed in Gradle 6.0. Use getClassDirectories().from(...)
. Ce serait formidable de montrer une solution compatible avec Gradle 6.0.Pour Gradle version 5.x, le
classDirectories = files(...)
donne un avertissement d'obsolescence et ne fonctionne pas du tout à partir de Gradle 6.0.C'est la manière non préconisée d'exclure des classes:la source
[]
aprèsexclude:
pour inclure plusieurs chemins.pour moi, c'est bien de travailler avec
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
ou
mais
pour exclure un package
*.projecteuler.*
et
test {}
au niveau du projet, non imbriqué dansjacocoTestReport
la source
Pour Gradle6 Utilisez quelque chose comme ci-dessous, car ils ont fait
classDirectories as final
, nous ne pouvons pas le réattribuer, mais une méthode de setter existeclassDirectories.setFrom
qui peut être utiliséela source
Voici une solution à ce problème dans ANT. Cela peut être adapté pour graduer en ajoutant ce qui suit sous la
jacocoTestReport
tâche. 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.la source
generated/java/
au lieu demain/java
.Cela fait un moment, mais je viens de le découvrir. Je luttais avec toutes les exclusions nécessaires. J'ai trouvé que c'était quelque chose de beaucoup plus simple pour moi. Si vous suivez le style de mise en page du projet Maven / src / main / java et / src / test / java, vous devez simplement mettre buildDir / classes / main dans votre configuration classDirectories comme ceci:
la source
Le code ci-dessous exclut également les classes de la vérification de la couverture:
la source
certains commentaires mentionnaient l'avertissement de dépréciation. pour résoudre il suffit d'utiliser le getter:
la source
Afin de filtrer dans le rapport jacoco, l'exclusion doit être effectuée en deux tâches
jacocoTestReport
etjacocoTestCoverageVerification
.exemple de code
la source
ajouter ci-dessous la configuration dans le fichier gradle.properties
coverageExcludeClasses=["com.example.package.elasticsearch.*", "com.example.package2.*",]
la source
coverageExcludeClasses
ne semble pas être une chose dans JaCoCo / Gradle