web-dev-qa-db-ja.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'を取得できません。 2番目のオプション(excludesのみ)を使用すると、ビルドはスムーズに実行されますが、クラスは除外されません。

17
Juan Pressacco

除外している別のものを測定しています。デフォルトのJaCoCoスコープは「BUNDLE」で、コード全体を意味すると思います。私はそれを使ったことがありません。私は常に「CLASS」スコープのみを測定します。そして、あなたも同じことをしようとしているようです。

Excludesはスコープ内の要素に関連しています。 「バンドル」の意味はわかりませんが、全部かゼロか、どちらかだと思いがちです。また、excludesは異なるタイプのワイルドカードを使用します。エレメント "CLASS"(または "PACKAGE")を使用するように構成を変更してみてください。

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

check.dependsOn jacocoTestCoverageVerification
11
MartinTeeVarga

私の場合、私did[〜#〜]バンドル[〜#〜]を使用したかった特定のpackagesおよびfilesを除外しながら、全体のしきい値を設定するスコープ。

最後に私のために働いたのは、元の質問で提案されているようにclassDirectories excludeを追加することでしたが、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/

11
jivimberg