2017-05-11 39 views
0

我們在我們的java項目jacoco中使用gradle插件來計算覆蓋率。 問題是我們把從XML中生成的類放在一個額外的項目中,並將其解析爲依賴項。我們也希望這些模型類的代碼覆蓋率也能分析它。檢查我們是否在映射類中使用了數據容器的所有setter方法。模型項目中的代碼覆蓋不是一種選擇。在jacoco報告中顯示jar包中的外部源

目前jacoco只在報表(html/xml/csv)中顯示我們的主類中的類,而不是外部的jar類。當我用eclipse或intellij加載時,jacoco會話包含覆蓋數據。

buildscript { 
... 
    dependencies { 
    ...  
     classpath 'externalpackage:externalpackage-model' 
    ... 
    } 
} 

compile('externalpackage:externalpackage-model:0.0.8') 
testCompile('externalpackage:externalpackage-model:[email protected]') 
testCompile('externalpackage:externalpackage-model:0.0.8:[email protected]') 

jacoco { 
    toolVersion = "0.7.6.201602180812" 
    reportsDir = file("$buildDir/customJacocoReportDir") 
} 
jacocoTestReport { 
    reports { 
     xml.enabled true 
     csv.enabled true 
     html.enabled true 
     html.destination "${buildDir}/jacocoHtml"   
} 

additionalSourceDirs files('externalpackage:externalpagage:0.0.8:[email protected]') 
//Doesn't work either 
//additionalSourceDirs files('C:/Users/sero/Downloads/test/externalpackage-0.0.8-sources') 
//additionalSourceDirs = files('C:/Users/sero/Downloads/test/externalpackage-0.0.8-sources/de/mycompany/.../MyModelClasses.java') 
} 

罐子源包是這樣的: (根)/ DE/myCompany的/.../ MyModelClasses.java

也許有人具有

+0

您正在討論將_「我們的類從**生成的**」放入jacoco-report中。通常,你想從所有類型的代碼分析中排除生成的類,因爲如果它生成了,即使覆蓋率很低,也不能改變任何東西。而且:生成的類通常只是數據容器,並且不提供任何邏輯 - 測試(並從中計算覆蓋範圍)getter/setter用處不大。 – Andy

+0

這是正確的,數據類不需要測試。但是對這個問題的要求有點不同。我們需要驗證所有的測試都使用這些數據容器的setter方法。有了這個我們想驗證我們並沒有忘記在映射類中設置任何字段。 –

回答

1

由我自己找到它的想法。問題是,你需要指定類的路徑。

我將jar解壓縮到build文件夾中,並將additionalClassDirs和additionalSourceDirs添加到報告作業中。

這是構建文件。

configurations { 
    externalClasses 
    externalSources 
} 

dependencies { 
    externalClasses "externalpackage:externalpackage-model:[email protected]" 
    externalSources "externalpackage:externalpackage-model:0.0.8:[email protected]"   
    ... 
} 

buildscript { 
... 
    dependencies { 
    ...  
     classpath 'externalpackage:externalpackage-model' 
    ... 
    } 
} 

compile('externalpackage:externalpackage-model:0.0.8') 
testCompile('externalpackage:externalpackage-model:[email protected]') 
testCompile('externalpackage:externalpackage-model:0.0.8:[email protected]') 

jacoco { 
    toolVersion = "0.7.6.201602180812" 
    reportsDir = file("$buildDir/customJacocoReportDir") 
} 

task unzipExternalModel(type: Copy){ 
    from zipTree(configurations.externalSources.files.first()) 
    into "$buildDir/tmp/externalSources" 
    from zipTree(configurations.externalClasses.files.first()) 
    into "$buildDir/tmp/externalClasses" 
} 

jacocoTestReport { 
    dependsOn unzipExternalModel 
    reports { 
     xml.enabled true 
     csv.enabled true 
     html.enabled true 
     html.destination "${buildDir}/jacocoHtml"   
    } 
    additionalSourceDirs = files("$buildDir/tmp/externalSources") 
    additionalClassDirs = files("$buildDir/tmp/externalClasses") 
} 
+0

請注意,爲了獲得源輸出,我必須將複製任務分成兩部分(不支持設置'into'兩次) –