新しい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のみ)を使用すると、ビルドはスムーズに実行されますが、クラスは除外されません。
除外している別のものを測定しています。デフォルトのJaCoCoスコープは「BUNDLE」で、コード全体を意味すると思います。私はそれを使ったことがありません。私は常に「CLASS」スコープのみを測定します。そして、あなたも同じことをしようとしているようです。
Excludesはスコープ内の要素に関連しています。 「バンドル」の意味はわかりませんが、全部かゼロか、どちらかだと思いがちです。また、excludesは異なるタイプのワイルドカードを使用します。エレメント "CLASS"(または "PACKAGE")を使用するように構成を変更してみてください。
violationRules {
rule {
element = 'CLASS'
excludes = ['com.jacoco.dto.*']
limit {
counter = 'BRANCH'
minimum = 0.8
}
}
}
check.dependsOn jacocoTestCoverageVerification
私の場合、私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/