简体   繁体   English

Jacoco 报告不排除指定文件

[英]Jacoco report isn't excluding specified files

I'm using Jacoco 0.8.5 and Gradle 6.4, I have an Android project which I'm trying to setup my code coverage.我正在使用 Jacoco 0.8.5 和 Gradle 6.4,我有一个Android 项目,我正在尝试设置我的代码覆盖率。 Here is how my jacoco.gradle file:这是我的 jacoco.gradle 文件的方式:

apply plugin: 'jacoco'

def flavor = "debug"
def unitTestTask = "testDebugUnitTest"

jacoco {
    toolVersion = "0.8.5"
}

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
}

final androidExcludes =
        ["**/R.class",
         "**/R\$*.class",
         "**/BuildConfig.*",
         "**/Manifest*.*",
         "**/*Test*.*",
         "android/**/*.*",
         "**/*_MembersInjector.class",
         "**/Dagger*Component.class",
         "**/Dagger*Component\$Builder.class",
         "**/*Module_*Factory.class",
         "**/*_Provide*Factory*.*",
         "**/*_Factory*.*",
         "**/*Activity*.*",
         "**/*Fragment*.*",
         "**/*ViewHolder*.*",
         "**/*Adapter*.*"]


task jacocoReport(type: JacocoReport, dependsOn: "${unitTestTask}") {
    reports {
        xml.enabled = true
        html.enabled = true
    }

    afterEvaluate {

        def debugTree = fileTree(dir: "$project.buildDir/intermediates/javac/${flavor}/classes",
                excludes: androidExcludes)
        def kotlinDebugTree = fileTree(dir: "$project.buildDir/tmp/kotlin-classes/${flavor}/",
                excludes: androidExcludes)
        def mainSrc = "$project.projectDir/src/main/java"

        sourceDirectories.setFrom(files([mainSrc]))
        classDirectories.setFrom(files([debugTree], [kotlinDebugTree]))
        executionData.setFrom(fileTree(dir: project.buildDir, includes: ["jacoco/${unitTestTask}.exec"]))
    }
}

I want to remove from the coverage some files, set in androidExcludes, for example Activities or Adapter.我想从覆盖范围中删除一些在 androidExcludes 中设置的文件,例如活动或适配器。 But currently the report doesn't take into account my excludes, as you can see in the following report from CodeCov I still have excluded files (ViewHolder or Adapter)但是目前该报告没有考虑到我的排除项,正如您在 CodeCov 的以下报告中看到的那样,我仍然有排除文件(ViewHolder 或适配器)

在此处输入图像描述

JaCoCo probably won't generate coverage reports, while there are no tests in app/src/test (or app/src/androidTest for integration tests). JaCoCo 可能不会生成覆盖率报告,而app/src/test (或app/src/androidTest用于集成测试)中没有测试。 For JUnit 5 it also needs these dependencies:对于 JUnit 5 它还需要以下依赖项:

dependencies {

    // (Required) Writing and executing Unit Tests on the JUnit Platform
    testImplementation ("org.junit.jupiter:junit-jupiter-api:5.6.2")
    testRuntimeOnly ("org.junit.jupiter:junit-jupiter-engine:5.6.2")

    // (Optional) If you need "Parameterized Tests"
    testImplementation ("org.junit.jupiter:junit-jupiter-params:5.6.2")

    // (Optional) If you also have JUnit 4-based tests
    testImplementation ("junit:junit:4.13")
    testRuntimeOnly("org.junit.vintage:junit-vintage-engine:5.6.2")

    androidTestImplementation ("org.junit.jupiter:junit-jupiter-api:5.6.2")

    // The instrumentation test companion libraries
    androidTestImplementation ("de.mannodermaus.junit5:android-test-core:1.2.0")
    androidTestRuntimeOnly ("de.mannodermaus.junit5:android-test-runner:1.2.0")

    // testImplementation ("androidx.test:core:1.2.0")
    // androidTestImplementation("androidx.test:runner:1.2.0")
    androidTestImplementation("androidx.test:rules:1.2.0")
}

PR #23 fixes the tests. PR #23修复了测试。 The output from :jacocoTestReportDebug looks alike this then:来自:jacocoTestReportDebug看起来像这样:

JaCoCo HTML 报告

Notice the Created with JaCoCo 0.8.5.201910111838 at the bottom.注意底部的Created with JaCoCo 0.8.5.201910111838


And for CodeCov, you'd need to add a codecov.yml ;对于 CodeCov,您需要添加一个codecov.yml see ignoring paths看到忽略路径
(the CodeCov configuration does not care about the JaCoCo configuration). (CodeCov 配置不关心 JaCoCo 配置)。

Did you tried to configure the gradle jacoco plugin specifically the exccludes:您是否尝试过配置 gradle jacoco 插件,具体排除:

test {
    jacoco {
        enabled = true
        destinationFile = file("$buildDir/jacoco/${name}.exec")
        includes = []
        excludes = []
        excludeClassLoaders = []
        includeNoLocationClasses = false
        sessionId = "<auto-generated value>"
        dumpOnExit = true
        classDumpDir = null
        output = JacocoTaskExtension.Output.FILE
        address = "localhost"
        port = 6300
        jmx = false
    }
}

source: https://docs.gradle.org/current/userguide/jacoco_plugin.html来源: https://docs.gradle.org/current/userguide/jacoco_plugin.html

For me this is working fine.对我来说,这工作正常。 With this you can exclude complete packages **/my/package/**有了这个你可以排除完整的包**/my/package/**

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM