Filtrer les rapports de couverture de JaCoCo avec Gradle

problème:

j'ai un projet avec et je veux pouvoir filtrer certaines classes et/ou paquets.

Documentation Connexe:

j'ai lu la documentation suivante:

officiel site: http://www.eclemma.org/jacoco/index.html

Official docs for : https://gradle.org/docs/current/userguide/jacoco_plugin.html

Officiel Github , travail sur la couverture: https://github.com/jacoco/jacoco/wiki/FilteringOptions https://github.com/jacoco/jacoco/issues/14

Liées StackOverflow Liens:

JaCoCo & Grad-Options de filtrage (pas de réponse)

exclure les colis du rapport Jacoco en utilisant Sonarrunner et Grad (ne pas utiliser )

JaCoCo-exclure JSP du rapport (il semble fonctionner pour , j'utilise )

Configuration de Maven Jacoco-exclure les classes/paquets du rapport ne fonctionne pas (cela semble fonctionner pour , j'utilise )

JaCoCo gradle plugin exclure (pas Pu obtenir que cela fonctionne)

Gradle Jacoco - les rapports de couverture inclut des classes exclues dans la configuration (Semble très proche, il a utilisé doFirst , n'a pas de travail 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 paquets et classes lors de la génération des rapports de couverture ?

63
demandé sur Community 2015-04-27 08:25:13

5 réponses

Merci, Yannick Welsch :

après avoir cherché Google, en lisant les docs de Grad le et en passant par les plus anciens StackOverflow messages, j'ai trouvé cette réponse sur le forums!

jacocoTestReport {
    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it, exclude: 'com/blah/**')
        })
    }
}

Source: https://issues.gradle.org/browse/GRADLE-2955

Solution à mon build.gradle pour Java/Groovy projets:

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 voir, j'ai réussi à ajouter plus de paquets à 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 que Android:

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

Source: https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/quality.gradle#L59

68
répondu Jared Burrows 2017-10-23 14:07:50

pour moi, c'est très 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 initalement demandé la réponse est donc:

donc, si vous me demandez: ce n'est pas une question de

excludes = ["projecteuler/**"]

ou

excludes += ["projecteuler/**"]

mais

excludes = ["**/projecteuler/**"]

pour exclure un colis *.projecteuler.*

et test {} au niveau du projet, non imbriqués dans jacocoTestReport

8
répondu childno͡.de 2016-06-21 10:37:31

Ici est une solution pour ce problème dans ANT. Ceci peut être adapté à gradle en ajoutant ce qui suit Sous la tâche jacocoTestReport . Bien que cela ne soit pas vraiment documenté par jacoco, cela semble être la seule façon de filtrer les résultats des tests pour l'instant.

afterEvaluate {
    classDirectories = files(classDirectories.files.collect {
        fileTree(dir: it, exclude: 'excluded/files/**')
    })
}
4
répondu Andre Compagno 2017-05-23 12:09:58

c'est éteint depuis un moment, mais je viens de croiser ça. 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 le projet Maven style de mise en page /src/main/java et /src/test/java, il vous suffit de mettre buildDir/classes/ principal 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
                     ]
        )
    }
}
4
répondu Randy 2016-03-02 00:16:45

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/**'])
        })
    }
}
1
répondu er-han 2018-01-30 12:54:29