java 如何在Gradle中使用Jacoco插件沿着JVM测试套件插件?

jucafojl  于 2023-06-04  发布在  Java
关注(0)|答案(2)|浏览(271)

我们有一个使用Gradle构建工具的Java项目。我们使用jacoco插件来生成测试覆盖报告。后来,我们使用Gradle的JVM测试套件插件添加了测试套件。我们已经观察到,所有那些由测试套件运行的测试类都没有被jacoco的代码覆盖报告所覆盖。所以如果有人知道我应该在build.gradle文件中写些什么来完成这个任务,那就太好了。谢谢
这是build.gradle文件片段:-

plugins {
    id 'java'
    id 'jacoco'
    id 'jvm-test-suite'
}

test {
    useJUnitPlatform()
    finalizedBy jacocoTestReport
}

testing {
    suites {
        test {
            useJUnitJupiter()
        }

        customTest(JvmTestSuite) {
            dependencies {
                ... // some dependencies
            }
        }
    }
}

tasks.named('check') {
    dependsOn(testing.suites.customTest)
}

dependencies {
... // some other dependencies
}

jacocoTestReport {
    dependsOn test
    reports {
        xml.required = true
    }
}
m1m5dgzv

m1m5dgzv1#

请参阅新的JaCoCo Report Aggregation Pluginaggregation related Samples(在Java标题下),了解如何在多个测试套件中合并覆盖率的信息。

von4xj4u

von4xj4u2#

考虑到您已经定义了一个额外的测试套件(integrationTest)并添加了jacoco插件,如下所示:

plugins {
    java
    `jvm-test-suite`
    jacoco
}

testing {
    suites {
        @Suppress("UnstableApiUsage")
        named<JvmTestSuite>("test") {
        useJUnitJupiter()
            testType.set(TestSuiteType.UNIT_TEST)
        }

        @Suppress("UnstableApiUsage")
        register<JvmTestSuite>("integrationTest") {
            useJUnitJupiter()
            testType.set(TestSuiteType.INTEGRATION_TEST)

            dependencies {
                configurations.named("integrationTestImplementation") {
                    extendsFrom(configurations.testImplementation.get())
                }
                implementation(project())
            }
        }
    }
}

每次执行testintegrationTest时,都会在build/(test|integrationTest).exec上创建相应的jacoco exec文件
现在要获取html报告(或xml/csv报告,取决于您在tasks.jacocoTestReport {...}块中请求的报告),jacoco插件添加了jacocoTestReport任务,该任务将.exec文件转换为其他格式。jacocoTestReport假设只有一个名为test的默认测试套件,因此只考虑build/jacoco/test.exec
至于现在(Gradle 8.1.1),将jacoco-report-aggregation plugin添加到构建中将自动创建相应的任务,以将.exec覆盖率数据转换为您声明的任何其他测试套件的其他格式。在我的示例中,在应用id("jacoco-report-aggregation")之后,我将自动获取integrationTestCodeCoverageReport任务,该任务将负责将build/jacoco/integrationTest.exec转换为html和/或其他格式。
最后,如果我想有一个html格式的聚合覆盖率报告,我需要使用testCodeCoverageReport任务,这也是通过在构建中引入jacoco-report-aggregation带来的。根据描述(“生成聚合代码覆盖率报告”),此任务的目标正是报告聚合。但是你需要在使用之前调整它的配置,这样它才能知道你的自定义测试套件:

reporting {
    reports {
        @Suppress("UnstableApiUsage")
        named<JacocoCoverageReport>("testCodeCoverageReport") {
            reportTask {
                executionData.builtBy(tasks.test, tasks.named("integrationTest")) // adding dependencies between aggregate reporting and test tasks
                executionData.from( // specifying paths to process coverage in .exec format
                    project.layout.buildDirectory.file("jacoco/test.exec"),
                    project.layout.buildDirectory.file("jacoco/integrationTest.exec")
                )
            }
            testType.set("Aggregate")
        }
    }
}

现在,要获得HTML格式的单个聚合覆盖率报告,请执行./gadlew test integrationTest testCodeCoverageReport

相关问题