2013-12-17 48 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)到这个问题。 –

相关问题