如何验证某些排除类和jacoco插件的最小覆盖率?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何验证某些排除类和jacoco插件的最小覆盖率?相关的知识,希望对你有一定的参考价值。

我需要使用新的jacoco任务检查最小覆盖率

jacocoTestCoverageVerification

此任务在3.4.1 gradle版本和jacoco插件> = 0.6.3中可用

我可以运行另一个生成带有分支覆盖率的html报告的任务,但现在我想使用该数字来使构建失败。

这是我的代码

buildscript {
    ext {
        ....
    }
    repositories {
        mavenCentral()
        maven {
            ....
        }
    }
    dependencies {
        .....
    }
}


apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'jacoco'

jar {
    baseName = "coverage-test"
}


dependencies {
    // my dependencies
}


eclipse {
    classpath {
         containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
         containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
    }
}

wrapper {
    gradleVersion = '3.4.1'
}

jacoco {
    toolVersion = '0.7.9'
}

jacocoTestReport {
    reports {
        xml.enabled false
        csv.enabled false
    }    
    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."
    additionalSourceDirs = files(sourceSets.main.allJava.srcDirs)

    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(
                dir: it,
                excludes: 
                [
                        'com/jacoco/dto/**',
                        'com/jacoco/configs/**', 
                        //and others
                ])
        })
    }
}

jacocoTestCoverageVerification {

    //I tried this and it didn't work

  //   classDirectories = files(classDirectories.files.collect {
  //   fileTree(
  //    dir: it,
        // excludes: 
        // [
        //      'com/jacoco/dto/**',
        //      'com/jacoco/configs/**', 
        //      //and others
        // ])
  //   })

    violationRules {
        rule {
            //Also tried this and it didn't work

           // excludes = ['com/jacoco/dto/**', ...]

            limit {
                counter = 'BRANCH'
                minimum = 0.8
            }
        }
    }
}
check.dependsOn jacocoTestCoverageVerification

使用classDirectories我得到以下错误无法在null对象上获取属性'files'。使用第二个选项(仅排除),构建运行顺利,但不排除任何类。

答案

您正在测量您要排除的其他内容。默认的JaCoCo范围是“BUNDLE”,我认为这意味着整个代码。我从来没用过那个。我总是只测量“CLASS”范围。看起来你正试图做同样的事情。

排除是相对于范围中的元素。不知道它对“捆绑”意味着什么,但我几乎倾向于认为它是全有或全无。排除使用不同类型的通配符。尝试更改配置以使用元素“CLASS”(或“PACKAGE”)。

violationRules {
    rule {
        element = 'CLASS'
        excludes = ['com.jacoco.dto.*']
        limit {
            counter = 'BRANCH'
            minimum = 0.8
        }
    }
}

check.dependsOn jacocoTestCoverageVerification
另一答案

在我的情况下,我确实想要使用BUNDLE范围来设置整体的阈值,同时排除某些包和文件。

对我来说最有用的是添加classDirectories排除,如原始问题所示,但在afterEvaluate内部像这样:

afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it, exclude:  [
                    'com/example/my/package/*',
                    'com/example/service/MyApplication.class',
                    'com/google/protobuf/*'
            ])
        })
    }

作为参考,完整的build.gradle看起来像这样:

apply plugin: "jacoco”

jacocoTestCoverageVerification {
    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it, exclude:  [
                    'com/example/my/package/*',
                    'com/example/service/MyApplication.class',
                    'com/google/protobuf/*'
            ])
        })
    }

    violationRules {
        rule {
            limit {
                minimum = 0.79
            }
        }
    }
}


// to run coverage verification during the build (and fail when appropriate)
check.dependsOn jacocoTestCoverageVerification  

您可以在我的博客中找到更多详细信息:http://jivimberg.io/blog/2018/04/26/gradle-verify-coverage-with-exclusions/

以上是关于如何验证某些排除类和jacoco插件的最小覆盖率?的主要内容,如果未能解决你的问题,请参考以下文章

Jacoco Gradle 中的最小代码覆盖率阈值

如何从android项目中的jacoco测试覆盖率报告中排除方法

Maven Jacoco 配置 - 从报告中排除类/包不起作用

使用 Jacoco 从 Sonar 中的条件覆盖范围中排除 groovy slf4j 日志记录

使用 Gradle 过滤 JaCoCo 覆盖率报告

在覆盖 JUnit 中排除文件夹 [关闭]