当前位置: 首页 > 知识库问答 >
问题:

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

裴泰平
2023-03-14

我需要检查新jacoco任务的最小覆盖范围

Jacocotestcoverageverization

gradle版本3.4.1和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

共有1个答案

夏兴生
2023-03-14

在我的例子中,我确实希望使用BUNDLE作用域为整体设置阈值,同时排除某些包和文件。

对我来说,最后起作用的是添加classdirectoriesexclude,就像最初的问题中建议的那样,但是在afterevalue中,如下所示:

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 {
        getClassDirectories().setFrom(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-covery-with-exclusions/

 类似资料:
  • 我想以某种方式使用Jacoco,这样它就排除了。为了实现这一点,我加入了

  • 如何排除来自jacoco code coverage,在pom中。xml还是java代码?

  • 我一直试图从生成的覆盖报告中删除某些文件。我尝试了以下事情: 修改代码: 也试过, 我试图找到解决方案时提到的许多链接中的一些: Maven Jacoco配置-从不工作的报告中排除类/包 Jacoco如何正确排除包 如何在子项目中添加更多Jacoco排除? http://tdongsi.github.io/blog/2017/09/23/jacoco-in-maven-project/ 但是每次我

  • Jacoco代码覆盖率报告还包括“系统路径jar”中的类,我在maven依赖项下面添加了这些类 我试图排除这个罐子的文件从Jacoco插件像这样: 但这种排斥并不奏效。它仍在显示jar中包含的文件的覆盖率报告。如图所示,文件位于org中。阿帕克。和组织。克洛布斯。报道中不应该有包裹。

  • 更新gradle android插件后,我得到了下面的错误。 任务执行失败: App: JacocoTestReport. 无法读取执行数据文件应用/构建/输出/代码覆盖/连接/coverage.ec jacoco version=“0.7.6.201602180812” Android插件版本:'com.android.tools.build: gradle: 2.1.0' 最新的插件有什么问题

  • 我想从JaCoCo中排除一些类别,但排除似乎不起作用。 例如,我想排除所有以Dao结尾的Java类(例如com.company.emplyedao)。 我已经尝试了以下代码,但当我将其推送到sonar/use JacoTestReport时,它仍然显示出来。 我将它与Android结合使用。发生了什么事?