2017-04-03 117 views
3

我需要新的jacoco任務檢查最小覆蓋如何驗證一些排除的類和jacoco插件的最小覆蓋率?

jacocoTestCoverageVerification

這個任務是可用的3.4.1版本的Gradle,並與jacoco插件> = 0.6.3

我可以運行另一個任務,生成一個分支機構覆蓋率的HTML報告,但現在我想使用該數字來使構建失敗。

這是我的代碼

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 

隨着classDirectories我收到以下錯誤空對象上無法獲取財產「文件」。而第二個選項(只有不包括),構建順利運行,但它不排除任何類。

回答

2

您正在測量不同的東西,你不包括在內。默認的JaCoCo範圍是「BUNDLE」,我相信這意味着整個代碼。我從來沒有用過。我總是隻測量「CLASS」範圍。看起來你正在嘗試做同樣的事情。

排除是相對於範圍內的元素。不知道這對「BUNDLE」意味着什麼,但我幾乎傾向於認爲它是全部或者沒有。排除使用不同類型的通配符。嘗試更改您的配置以使用元素「CLASS」(或「PACKAGE」)。

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

check.dependsOn jacocoTestCoverageVerification 
+0

BTW這裏是什麼,我在我的項目嘗試了要點(和它的工作):https://gist.github.com/sm4/1cacc5d8b6d99cac84336ab4df06d1bd,這是項目:https://github.com/ sm4 /促銷代碼 – sm4

+0

是的,你是對的,我試圖衡量兩個不同的東西。另外我嘗試用你的配置來添加一個檢查規則,它的工作原理。謝謝!! –