2017-04-03 3 views
3

Je dois vérifier la couverture minimale avec la nouvelle tâche de jacocoComment puis-je vérifier la couverture minimale avec certaines classes exclues et avec le plugin jacoco?

jacocoTestCoverageVerification

Cette tâche est disponible avec la version 3.4.1 gradle et avec le plugin jacoco> = 0.6.3

Je pourrais exécuter une autre tâche qui génère un rapport html avec la couverture de branche mais maintenant je veux utiliser ce nombre pour faire échouer la construction.

C'est mon code

buildscript { 
    ext { 
     .... 
    } 
    repositories { 
     mavenCentral() 
     maven { 
      .... 
     } 
    } 
    dependencies { 
     ..... 
    } 
} 


apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'jacoco' 

jar { 
    baseName = "coverage-test" 
} 


dependencies { 
    // my dependencies 
} 


eclipse { 
    classpath { 
     containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER') 
     containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8' 
    } 
} 

wrapper { 
    gradleVersion = '3.4.1' 
} 

jacoco { 
    toolVersion = '0.7.9' 
} 

jacocoTestReport { 
    reports { 
     xml.enabled false 
     csv.enabled false 
    }  
    group = "Reporting" 
    description = "Generate Jacoco coverage reports after running tests." 
    additionalSourceDirs = files(sourceSets.main.allJava.srcDirs) 

    afterEvaluate { 
     classDirectories = files(classDirectories.files.collect { 
      fileTree(
       dir: it, 
       excludes: 
       [ 
         'com/jacoco/dto/**', 
         'com/jacoco/configs/**', 
         //and others 
       ]) 
     }) 
    } 
} 

jacocoTestCoverageVerification { 

    //I tried this and it didn't work 

    // classDirectories = files(classDirectories.files.collect { 
    // fileTree(
    // dir: it, 
     // excludes: 
     // [ 
     //  'com/jacoco/dto/**', 
     //  'com/jacoco/configs/**', 
     //  //and others 
     // ]) 
    // }) 

    violationRules { 
     rule { 
      //Also tried this and it didn't work 

      // excludes = ['com/jacoco/dto/**', ...] 

      limit { 
       counter = 'BRANCH' 
       minimum = 0.8 
      } 
     } 
    } 
} 
check.dependsOn jacocoTestCoverageVerification 

Avec classDirectories-je obtenir l'erreur suivante Impossible d'obtenir la propriété 'fichiers' sur l'objet null. Et avec la deuxième option (seulement exclut), la construction s'exécute sans problème mais n'exclut aucune classe.

Répondre

2

Vous mesurez une chose différente que vous excluez. La portée JaCoCo par défaut est "BUNDLE" qui, je crois, signifie le code entier. Je n'ai jamais utilisé ça. Je mesure toujours uniquement la portée "CLASS". Et il semble que vous essayez de faire la même chose.

Les exclus sont relatifs aux éléments de la portée. Je ne sais pas ce que cela signifie pour "BUNDLE", mais je suis presque enclin à penser que c'est soit tout ou rien. Aussi les exclus utilisent différents types de caractères génériques. Essayez de changer votre configuration pour utiliser l'élément "CLASS" (ou "PACKAGE").

violationRules { 
    rule { 
     element = 'CLASS' 
     excludes = ['com.jacoco.dto.*'] 
     limit { 
      counter = 'BRANCH' 
      minimum = 0.8 
     } 
    } 
} 

check.dependsOn jacocoTestCoverageVerification 
+0

est BTW ici un point essentiel de ce que j'ai essayé dans mon projet (et il a travaillé): https://gist.github.com/sm4/1cacc5d8b6d99cac84336ab4df06d1bd et c'est le projet: https://github.com/ sm4/promo-codes – sm4

+0

Oui vous aviez raison, j'essayais de mesurer deux choses différentes. Aussi, j'essaye avec votre configuration d'ajouter une règle de vérification et cela fonctionne. Merci!! –