我有一个遗留应用程序,它有一个与应用程序模块分开的单元测试模块。我正在将项目转换为使用 Gradle,其结构如下所示:
/root
/module1
/module2
...
/moduleN
/test
其中测试模块对 module1 到 moduleN 执行测试(并且依赖于它们)。我知道这不是一个很好的做法,因为它有点违背了单元测试的目的,但众所周知,遗留代码总是令人头疼。
因此,在我开始重构代码以使每个模块都有自己的单元测试(这意味着以合理的方式拆卸测试模块,即大量工作)之前,我想找到一个临时解决方案来获取正确的代码覆盖率,即让 JaCoCo 检测 module1、...、moduleN 中的所有类,而不仅仅是模块测试。
有没有办法告诉 JaCoCo 从其他模块检测类?
最佳答案
要包含“test”项目中子项目“module*”的覆盖率结果,您可能需要在测试项目的 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)
}
}
}
关于java - Gradle 和 JaCoCo : instrument classes from a separate subproject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20638039/