在 gradle 7.4 上使用 jacoco-report-aggregation 插件生成的合并覆盖单元和集成测试结果

Ger*_*EVI 7 gradle sonarqube jacoco-plugin

我正在将我的项目迁移到 Gradle 7.4,我想使用新的插件 jacoco-report-aggregation 来生成完美合并的单元和集成测试覆盖率报告以发送到 sonarqube。

我在每个子项目上使用 jvm 测试套件。

在此之前,我曾经在每个子项目中手动合并 exec 文件,效果很好

因此,我创建了两个任务: testCodeCoverageReport 和integrationTestCodeCoverageReport 针对 TestSuiteType.UNIT_TEST 和 TestSuiteType.INEGRATION_TEST testType,并将报告发送给 sonarqube。

我的配置:

plugins {
    id "org.sonarqube" version "3.3"
    id "org.owasp.dependencycheck" version "6.4.1.1"
    id 'org.springframework.boot' version "$springBootVersion"

    // Aggregating code coverage with JaCoCo
    id 'jacoco-report-aggregation'
}



dependencies {
    jacocoAggregation project(':subproject1')
    jacocoAggregation project(':subproject2')
}


reporting {
    reports {
        testCodeCoverageReport(JacocoCoverageReport) {
            testType = TestSuiteType.UNIT_TEST
        }
        
        integrationTestCodeCoverageReport(JacocoCoverageReport) {
            testType = TestSuiteType.INTEGRATION_TEST
        }
    }
}


project.tasks["sonarqube"].dependsOn tasks.named('testCodeCoverageReport', JacocoReport)
project.tasks["sonarqube"].dependsOn tasks.named('integrationTestCodeCoverageReport', JacocoReport) 
 
sonarqube.properties {
    property "sonar.coverage.jacoco.xmlReportPaths", "$buildDir/reports/jacoco/testCodeCoverageReport/testCodeCoverageReport.xml,$buildDir/reports/jacoco/integrationTestCodeCoverageReport/integrationTestCodeCoverageReport.xml"

}
Run Code Online (Sandbox Code Playgroud)

但计算出的覆盖率并不好。理想情况下,报告会在发送到 sonarqube 之前合并。

有可能做一些看起来像这样的事情吗?

reporting {
    reports {
        perfectMergeUnitAndIntegrationCodeCoverageReport(JacocoCoverageReport) {
            testTypes = [TestSuiteType.UNIT_TEST, TestSuiteType.INTEGRATION_TEST]
        }
    }
}

project.tasks["sonarqube"].dependsOn tasks.named('perfectMergeUnitAndIntegrationCodeCoverageReport', JacocoReport)

sonarqube.properties {
    property "sonar.coverage.jacoco.xmlReportPaths", "$buildDir/reports/jacoco/perfectMergeUnitAndIntegrationCodeCoverageReport/perfectMergeUnitAndIntegrationCodeCoverageReport.xml"

}
Run Code Online (Sandbox Code Playgroud)

感谢您的回答

And*_*rew -1

reporting {
    reports {
        testCodeCoverageReport(JacocoCoverageReport) {
            testType = TestSuiteType.UNIT_TEST
            jacocoTestCoverageVerification {
                afterEvaluate {       
getClassDirectories().setFrom(filesToExcludeFromCoverageReport)
                }
                dependsOn(test,integrationTest)
                executionData.from = files("$buildDir/jacoco/test.exec", "$buildDir/jacoco/intergrationTest.exec")
                violationRules {
                    rule {
                        limit {
                            minimum = 0.80
                        }
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)