gpt4 book ai didi

gradle - 当我的所有测试都在单独的子模块中时,如何使用 gradle 插件获取 Jacoco 覆盖率报告

转载 作者:行者123 更新时间:2023-12-03 03:03:40 26 4
gpt4 key购买 nike

由于我是 gradle 新手,因此我无法为我的 java 项目设置 jacoco 覆盖范围。我的最终目标是将其连接到 Sonar 。我所有的测试都在一个单独的模块中
结构体:

./build.gradle
settings.gradle

./submodule1/build.gradle
./submodule1/src/main/java/prismoskills/Foo.java

./submodule2/build.gradle
./submodule2/src/main/java/com/project/prismoskills/Bar.java

./test/build.gradle
./test/src/test/java/prismoskills/TestFooBar.java
我能想到的一种方法是设置 附加源目录 在测试模块中并仅在根和测试模块中启用 jacoco。
这种方法的问题是我的项目有很多子模块(我没有在这里显示)并且我无法以自动化的方式将附加的源目录传递给测试模块的 JacocoReport 任务。
看起来这个用例可以通过引用这个在 maven 中轻松处理
https://prismoskills.appspot.com/lessons/Maven/Chapter_06_-_Jacoco_report_aggregation.jsp
任何有关如何进一步使用 gradle 的线索将不胜感激。提前致谢
gradle version: 6.4
jacoco gradle plugin version: 0.8.5

最佳答案

我认为以下解决方案应该可以解决您的问题。这个想法是:

  • 为每个项目生成 JaCoCo 执行文件
  • 最后生成一份包含所有数据的 XML 报告

  • 它对 JUnit 报告的作用相同,因为在根项目中一起查看所有测试报告比在目录之间导航更容易。
    plugins {
    id 'base'
    id 'org.sonarqube' version '3.0'
    }

    allprojects {
    apply plugin: 'jacoco'
    apply plugin: 'project-report'

    // ...

    jacoco {
    toolVersion = 0.8.5
    }
    }

    subprojects {
    // ...

    test {
    reports.html.enabled = false
    useJunitPlatform()
    finalizedBy jacocoTestReport
    }

    jacocoTestReport {
    dependsOn test
    reports.html.enabled = false
    }
    }

    // ...

    task testReport(type: TestReport) {
    destinationDir = file("${buildDir}/reports/test")
    reportOn subprojects*.test
    }
    task jacocoTestReport(type: JacocoReport) {
    subprojects { subproject ->
    subproject.tasks.findAll { it.extensions.findByType(JacocoTaskExtension) }.each { extendedTask ->
    configure {
    sourceSets subproject.sourceSets.main
    if (file("${subproject.buildDir}/jacoco/${extendedTask.name}.exec").exists()) {
    executionData(extendedTask)
    }
    }
    }
    }
    reports.xml.enabled = true
    }
    rootProject.getTasksByName('test', true).each {
    it.finalizedBy(testReport)
    it.finalizedBy(jacocoTestReport)
    }
    这条线
    if (file("${subproject.buildDir}/jacoco/${extendedTask.name}.exec").exists()) {
    添加以防止在某些子项目根本没有测试时构建失败。

    关于gradle - 当我的所有测试都在单独的子模块中时,如何使用 gradle 插件获取 Jacoco 覆盖率报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62937975/

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