web-dev-qa-db-fra.com

Seuil minimal de couverture de code dans Jacoco Gradle

Comment définir la couverture minimale du code dans Jacoco Gradle ?

Je veux que la construction échoue si elle n'est pas remplie.

16
richersoon

La fonctionnalité est maintenant disponible. Vous devez simplement appliquer le plug-in Gradle JaCoCo et définir la vérification de la couverture comme suit:

apply plugin: 'jacoco'

jacocoTestCoverageVerification {
    violationRules {
        rule {
            limit {
                minimum = 0.7
            }
        }
    }
}

// to run coverage verification during the build (and fail when appropriate)
check.dependsOn jacocoTestCoverageVerification

La dernière ligne est très importante car sinon votre génération n’échouerait pas à moins d’exécuter explicitement la tâche jacocoTestCoverageVerification.

Plus d'informations sur le type de vérifications que vous pouvez ajouter se trouvent dans la documentation du plugin .

21
Joffrey

Cette fonctionnalité n'est actuellement pas disponible avec le plugin Gradle Jacoco. Voir le numéro ouvert ici .

Il est toutefois possible d'écrire une tâche personnalisée qui analyse le rapport Jacoco et échoue lors de la construction en fonction de la couverture. Voir ici pour une façon de mettre en œuvre cela.

5
RaGe

Dans une application Android, cette configuration fonctionne:

projet : build.gradle 

buildscript {
    repositories {
        google()
        jcenter()
        maven { url 'https://plugins.gradle.org/m2/' }
    }
    dependencies {
        classpath "com.Android.tools.build:gradle:3.1.4"
        classpath "org.jacoco:org.jacoco.core:0.8.2"
    }
}

app : build.gradle

ext.jacoco_version = '0.8.2'
def configDir = "${project.rootDir}/config"
def reportDir = "${project.buildDir}/reports"
def mainSrc = "$project.projectDir/src/main/Java"
def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'Android/**/*.*']
def debugTree = fileTree(dir: "$project.buildDir/intermediates/classes/debug", excludes: fileFilter)
//Jacoco jacocoTestReport
apply plugin: 'jacoco'
jacoco.toolVersion = jacoco_version
task jacocoTestReport(type: JacocoReport, dependsOn: 'testDebugUnitTest') {
    reports {
        xml.enabled = false
        html.enabled = true
    }
    sourceDirectories = files([mainSrc])
    classDirectories = files([debugTree])
    executionData = fileTree(dir: project.buildDir, includes: [
            'jacoco/testDebugUnitTest.exec', 'outputs/code-coverage/connected/*coverage.ec'
    ])
}
task jacocoTestCoverageVerification(type: JacocoCoverageVerification, dependsOn: 'jacocoTestReport') {
    sourceDirectories = files([mainSrc])
    classDirectories = files([debugTree])
    executionData = files("${buildDir}/jacoco/testDebugUnitTest.exec")
    violationRules {
        failOnViolation = true
        rule {
            limit {
                minimum = 0.7
            }
        }
    }
}

Nous pouvons l'exécuter en ligne de commande avec: 

./gradlew jacocoTestCoverageVerification

J'ai utilisé Gradle wrapper 4.4.

0
SHoko

Voici l'exemple de la concurrence 

task wrapper(type: Wrapper){ 
     gradleVersion = '4.8' 
} 

plugins { 
    id 'Java' 
    id 'maven' 
    id "jacoco" 
} 

jacoco{ 
    toolVersion = '0.8.1' 
} 

jacocoTestCoverageVerification { 
    violationRules { 
        rule { 
            limit { 
                minimum = 0.5 
            } 
        } 
    } 
} 


jacocoTestReport { 
     reports { 
        csv.enabled false 
        xml.enabled false 
        html { 
            enabled true 
            destination file("$buildDir/reports/jacoco") 
        } 
    } 
   executionData(test) 
} 

tasks.build.dependsOn(jacocoTestReport) 

test{ 
    jacoco{ 
        append = false 
        destinationFile = file("$buildDir/jacoco/jacocoTest.exec") 
        classDumpDir = file("$buildDir/jacoco/classpathdumps") 
    } 
} 
0
Ranjith Sekar