java - Gradle 和 JaCoCo : instrument classes from a separate subproject

标签 java unit-testing gradle code-coverage jacoco

我有一个遗留应用程序,它有一个与应用程序模块分开的单元测试模块。我正在将项目转换为使用 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/

相关文章:

javascript - 如何使用返回任何元素数组的渲染函数对 Vue.js 功能组件进行单元测试?

plugins - 在任何编译执行时调用Gradle自定义任务

gradle - 如何将依赖项 jar 和 POM 发布到新的存储库?

java - 线程中的异常 "main"java.lang.IllegalStateException : The driver executable does not exist while running Selenium Test on Ubuntu

Python 单元测试 - 设置警告 : ResourceWarning

从范围返回模式字符串的java方法

c# - 为什么 Task.ContinueWith 在此单元测试中执行失败?

gradle - 使用 jenkins 将多个 aar 上传到 Nexus - gradle release

java - 如何使用套接字 channel 读写数据和接受连接

java - 从 HttpURLConnection 获取数据作为文本抛出 javax.net.ssl.SSLHandshakeException for SourceForge.net