2013-12-17 80 views
2

我有一個遺留應用程序,它具有與應用程序模塊分開的單元測試模塊。我轉換的項目中使用搖籃和結構如下:Gradle和JaCoCo:來自單獨子項目的儀器類

/root 
    /module1 
    /module2 
    ... 
    /moduleN 
    /test 

其中測試模塊執行的模塊1通過moduleN測試(以及依賴於它們)。我知道這不是一個很好的做法,因爲它有悖於單元測試的目的,但衆所周知,遺留代碼總是令人頭疼。

因此,在我開始重構代碼以便每個模塊都有其自己的單元測試(這意味着以合理的方式拆分測試模塊,即大量工作)之前,我想找到一個臨時解決方案來獲得正確的代碼覆蓋率,即讓JaCoCo儀器模塊module1,...,moduleN中的所有類,而不僅僅是模塊測試。

有沒有辦法告訴JaCoCo來從其他模塊的類儀器?

回答

2

要包含在「測試」項目的子項目「模塊*」覆蓋效果,你可能想嘗試從測試項目在你的build.gradle是這樣的:

// [EDIT] - 'afterEvaluate' NOK, use 'gradle.projectsEvaluated' instead (see comments) 
// afterEvaluate { 
gradle.projectsEvaluated { 
    // include src from all dependent projects (compile dependency) in JaCoCo test report 
    jacocoTestReport { 
     // get all projects we have a (compile) dependency on 
     def projs = configurations.compile.getAllDependencies().withType(ProjectDependency).collect{it.getDependencyProject()} 
     projs.each { 
      additionalSourceDirs files(it.sourceSets.main.java.srcDirs) 
      additionalClassDirs files(it.sourceSets.main.output) 
     } 
    } 
} 
+0

感謝您的答覆。我嘗試過,但是構建失敗,出現以下錯誤:'找不到'項目'modulex''的屬性'sourceSets' –

+0

請注意'modulex'確實是一個java項目,因此應該定義sourceSets。 –

+0

和[這裏是答案](http://stackoverflow.com/questions/15347364/gradle-multiproject-gives-could-not-find-property-sourcesets-on-project-erro)到這個問題。 –

相關問題