Gradle和JaCoCo:来自单独子项目的仪器类

时间:2013-12-17 15:26:28

标签: java unit-testing gradle code-coverage jacoco

我有一个遗留应用程序,它有一个与应用程序模块分开的单元测试模块。我正在将项目转换为使用Gradle,结构如下所示:

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

其中测试模块执行module1到moduleN的测试(并依赖于它们)。我知道这不是一个很好的做法,因为它有点挫败了单元测试的目的,但众所周知,遗留代码总是令人头痛。

所以在我开始重构代码之前,每个模块都有自己的单元测试(这意味着以合理的方式拆卸测试模块,即大量工作)我想找到一个临时解决方案来获取正确的代码覆盖,即让JaCoCo对module1,...,moduleN中的所有类进行测试,而不仅仅是模块测试。

有没有办法告诉JaCoCo从其他模块中检测类?

1 个答案:

答案 0 :(得分: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)
        }
    }
}