gradle jacocoTestReport 不工作?

gradle jacocoTestReport is not working?

我尝试使用 gradle jacoco 插件在 spring-gradle 项目中获得代码覆盖率。

build.gradle包含以下内容

apply plugin: "jacoco"

    jacoco {
        toolVersion = "0.7.1.201405082137"
        reportsDir = file("$buildDir/customJacocoReportDir")
    }

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

然后我运行

gradle test jacocoTestReport

在 build/reports 文件夹中仅生成文件 test.exec。

除此之外什么也没有发生。

如何获取 HTML 报告?

以下帮助。它在 gradle-2.3-all.zip 的 samples/testing/jacaco 来自 https://gradle.org/releases/

apply plugin: "java"

apply plugin: "jacoco"

jacoco {
    toolVersion = "0.7.1.201405082137"
    reportsDir = file("$buildDir/customJacocoReportDir")
}

repositories {
    mavenCentral()
}

dependencies {
    testCompile "junit:junit:4.+"
}

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


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

您不必配置 reportsDir/destinationFile

因为 jacoco 有它们的默认值。

build.gradle:

plugins {
    id 'java'
    id 'jacoco'
}

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

repositories {
    jcenter()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

运行 gradle test jacocoTestReport

您可以在./build/reports/jacoco/test目录中找到测试报告。

HTML 输出在 ./build/reports/jacoco/test/html 目录中。

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
}

sonarqube {
    properties {
        property "sonar.projectKey", "your_project_key"
        property "sonar.verbose", true
        property "sonar.projectName", "Your project name"
        property "sonar.coverage.jacoco.xmlReportPaths", "${rootDir}/build/reports/jacoco/codeCoverageReport/codeCoverageReport.xml"
    }
}

运行 测试覆盖率的命令:

./gradlew codeCoverageReport
./gradlew sonarqube -x test (test is excluded since already run and sonarqube by default executes test)

第二个命令如果没有使用sonarqube可以忽略

使它起作用的两点需要注意:

  1. 为了使所有模块的源集可用,遍历子项目和积累源集有效。 subprojects.sourceSets.main.allSource.srcDirs 无效。
  2. sonar.jacoco.reportPaths 弃用 。我们需要使用 sonar.coverage.jacoco.xmlReportPaths。在此处查看文档

不幸的是,none 这些答案对我有用。

我遇到了类似的问题。
唯一不同的是没有生成 exec 文件。
正因为如此, 我发现 jacocoTestReport 只是“skipped”。

我通过添加修复了它:

apply plugin: 'jacoco'

test {
  useJUnitPlatform()
  finalizedBy jacocoTestReport // report is always generated after tests run
}

jacocoTestReport {
    ...
    ...
    ...
    ...
}

那是因为我正在使用 Junit5 和 spring 启动 2.X