gpt4 book ai didi

gradle - jacoco 和 gradle 多模块项目的跨模块代码覆盖率

转载 作者:行者123 更新时间:2023-12-04 13:57:28 30 4
gpt4 key购买 nike

我们使用 gradle 3.3 和 jacoco 工具版本 0.7.6.201602180812。
我们有一个这样的 gradle 多项目:

  • parent
  • 产品1
  • 产品2
  • 产品3
  • 综合测试

  • 我们使用单元测试测试项目源代码,并在所有子项目上使用 jacoco 来生成 test.exec 文件。我们在 int-test 项目中有额外的集成测试,将 jacoco 结果添加到 int-test 项目中的 test-exec 中。我们在父项目上使用 sonarqube gradle 插件(2.2.1)来收集 SonarQube 服务器 v6.2 的所有内容。
    在他们自己的项目中测试源代码的测试一切运行良好:代码覆盖率在 jacoco 报告以及 SonarQube 上进行测量。
    只有 prod-projects(单个进程)中源的集成测试(int-test 项目)覆盖率既不在测试项目的覆盖率报告中,也不在类项目的覆盖率报告中测量。
    可能需要以某种方式组合顶级项目的覆盖率数据 - 有人知道该怎么做吗?最好的情况是 SonarQube 仍然显示单个模块级别的覆盖率。

    编辑
    这是一个小测试项目: https://github.com/MichaelZett/coveragetest
    运行“build smokeTest sonarqube”会导致:
  • 运行所有测试
  • 在所有子项目中生成 jacoco/test.exec 和 test-results/test/... 文件
  • 在 sonarqube 中解析这些
  • 在自己的项目中测试源的测试覆盖率的正确测量
  • 在另一个项目中测试源的测试缺少覆盖
  • 最佳答案

    如评论中所述,您必须首先 merge the Jacoco execution数据,然后告诉 sonarqube 使用它而不是个人 exec每个子模块生成的文件。

    我在这里添加一个示例,因为接受的答案中提供的链接有点误导。它们中的大多数为您提供了不同的解决方法来合并 Jacoco 报告,而不是合并执行数据,这正是您想要的。

    这是它的样子:

    def allTestCoverageFile = "$buildDir/jacoco/allTestCoverage.exec"

    sonarqube {
    properties {
    property "sonar.projectKey", "your.org:YourProject"
    property "sonar.projectName", "YourProject"
    property "sonar.jacoco.reportPaths", allTestCoverageFile
    }
    }

    task jacocoMergeTest(type: JacocoMerge) {
    destinationFile = file(allTestCoverageFile)
    executionData = project.fileTree(dir: '.', include:'**/build/jacoco/test.exec')
    }

    task jacocoMerge(dependsOn: ['jacocoMergeTest']) {
    // used to run the other merge tasks
    }

    subprojects {
    sonarqube {
    properties {
    property "sonar.jacoco.reportPaths", allTestCoverageFile
    }
    }
    }

    简而言之:
  • 首先,我们为我们的测试报告定义一个全局覆盖文件输出 (allTestCoverageFile)。
  • 然后我们需要告诉 Sonarqube 使用该文件(使用 sonar.jacoco.reportPaths )。但请注意,我们还必须在子项目关闭中执行此操作。这是极其重要的。不要错过它。
  • 最后,我们创建一个从 JacocoMerge 扩展的自定义任务。 (来自 Jacoco 插件的孵化类),它将所有项目(executionData)的所有测试覆盖率报告合并到我们的 allTestCoverageFile 中.

  • If you are using a version of SonarQube prior to 6.2 please use sonar.jacoco.reportPath property

    关于gradle - jacoco 和 gradle 多模块项目的跨模块代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41429841/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com