gpt4 book ai didi

java - 带有 Jacoco 插件的 build.gradle 不会为集成测试生成覆盖率报告

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:36 24 4
gpt4 key购买 nike

我有一个 build.gradle 文件,它可以单独或一起成功运行单元和集成测试(使用像 gradle test integrationTest 这样的命令一起运行)。两者都使用 Junit,我使用的是 Gradle 3,这不是 Android 项目。在单独的目录中为每个生成关于成功的报告。我还可以使用 gradle test jacocounit 测试覆盖率成功生成 Jacoco 报告。我无法通过使用 gradle integrationTest jacoco 获得我的其他工作集成测试的覆盖率报告,尽管测试成功运行并生成了 integrationTest.exec 文件。

更明确地说,我在 build/reports/index.html 中获取单元测试覆盖率报告,在 build/reports/test/index.html 和 build/reports/integrationTest/index.html 中获取 Junit 报告。创建了一个 build/reports/jacoco 目录,但只包含一个空的“test”目录。 build/还包含一个 jacoco/目录,其中包含 .exec 文件和类路径转储。

这是我的缩写 build.gradle

apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'jacoco'

repositories {
mavenCentral()
}

sourceSets {
main {
java {
srcDirs = ['src/java']
}
test {
java {
srcDirs = ['test/java']
}
}
resources {
srcDirs = ['src/java', 'conf', 'resource']
}
}

integrationTest {
java {
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
srcDir file('integration_test/java')
}
}
}

test {
jacoco {
append = false
destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
classDumpFile = file("$buildDir/jacoco/classpathdumps")
}
}

configurations {
integrationTestCompile.extendsFrom testCompile
integrationTestRuntime.extendsFrom testRuntime
}

/* SNIP */

task integrationTest(type: Test) {
dependsOn startserver

testClassesDir = sourceSets.integrationTest.output.classesDir
classpath = sourceSets.integrationTest.runtimeClasspath
}
integrationTest.finalizedBy stopserver

check.dependsOn integrationTest
integrationTest.mustRunAfter test

tasks.withType(Test) {
reports.html.destination = file("${reporting.baseDir}/${name}")
}

jacoco {
toolVersion = "0.7.6.201602180812"
}

jacocoTestReport {
reports {
xml.enabled false
csv.enabled false
html.destination "$buildDir/reports"
}
}

我已经看到有关合并两个报告、生成我已有的 Junit 集成测试报告的现有问题,以及关于 Maven 和 Ant 的类似但最终没有帮助的问题。我找到的最接近的是 this ,但我尝试从中改编的任何内容都没有取得成果。似乎确实有一个 similar question ,但他们的 build.gradle 较少,唯一的答复是上一个链接中问题作者的 0 赞成票,未接受的答复。

由于这已经很长了,我不想提供比这里更多的内容,但如果有任何不清楚的地方,我很乐意提供更多内容。

我已经证实,没有发生像单元测试结果覆盖集成测试这样愚蠢的事情——运行集成测试和没有定期测试的 jacoco 甚至不会生成类似的文件。

我可以做些什么来获得集成测试覆盖率?

[第一次编辑] 我创建了一个小型 Github 存储库,其中包含重现此问题所需的一切:https://github.com/micseydel-tile/gradle-jacoco-integration-test

最佳答案

我终于可以通过以下方法获得汇总报告:根 build.gradle -

subprojects {
apply(plugin: 'org.jetbrains.kotlin.jvm')

repositories {
jcenter()
mavenCentral()
}
}

task codeCoverageReport(type: JacocoReport) {

// Gather execution data from all subprojects
executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")

// Add all relevant sourcesets from the subprojects
subprojects.each {
sourceSets it.sourceSets.main
}

reports {
xml.enabled true
html.enabled true
csv.enabled false
}
}

// always run the tests before generating the report
codeCoverageReport.dependsOn {
subprojects*.test
}

运行gradle codeCoverageReport

关于java - 带有 Jacoco 插件的 build.gradle 不会为集成测试生成覆盖率报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39967911/

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