web-dev-qa-db-ja.com

Jacoco Gradleの最小コードカバレッジしきい値

Jacoco Gradle で最小コードカバレッジを設定するにはどうすればよいですか?

ビルドが満たされていない場合、ビルドを失敗させます。

19
richersoon

この機能が利用可能になりました。 Gradle JaCoCoプラグインを適用し、次のようにカバレッジ検証を定義するだけです。

apply plugin: 'jacoco'

jacocoTestCoverageVerification {
    violationRules {
        rule {
            limit {
                minimum = 0.7
            }
        }
    }
}

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

最後の行は、jacocoTestCoverageVerificationタスクを明示的に実行しない限りビルドが失敗しないため、非常に重要です。

追加できるチェックの種類に関する詳細は、 プラグインのドキュメント にあります。

27
Joffrey

現在、この機能はgradle Jacocoプラグインでは使用できません。未解決の問題 here を参照してください。

ただし、Jacocoレポートを解析し、カバレッジに基づいてビルドを失敗させるカスタムタスクを作成することは可能です。これを実装する1つの方法については、 here を参照してください。

5
RaGe

Androidアプリケーションでは、この設定は機能します:

プロジェクト:build.gradle

buildscript {
    repositories {
        google()
        jcenter()
        maven { url 'https://plugins.gradle.org/m2/' }
    }
    dependencies {
        classpath "com.Android.tools.build:gradle:3.1.4"
        classpath "org.jacoco:org.jacoco.core:0.8.2"
    }
}

app:build.gradle

ext.jacoco_version = '0.8.2'
def configDir = "${project.rootDir}/config"
def reportDir = "${project.buildDir}/reports"
def mainSrc = "$project.projectDir/src/main/Java"
def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'Android/**/*.*']
def debugTree = fileTree(dir: "$project.buildDir/intermediates/classes/debug", excludes: fileFilter)
//Jacoco jacocoTestReport
apply plugin: 'jacoco'
jacoco.toolVersion = jacoco_version
task jacocoTestReport(type: JacocoReport, dependsOn: 'testDebugUnitTest') {
    reports {
        xml.enabled = false
        html.enabled = true
    }
    sourceDirectories = files([mainSrc])
    classDirectories = files([debugTree])
    executionData = fileTree(dir: project.buildDir, includes: [
            'jacoco/testDebugUnitTest.exec', 'outputs/code-coverage/connected/*coverage.ec'
    ])
}
task jacocoTestCoverageVerification(type: JacocoCoverageVerification, dependsOn: 'jacocoTestReport') {
    sourceDirectories = files([mainSrc])
    classDirectories = files([debugTree])
    executionData = files("${buildDir}/jacoco/testDebugUnitTest.exec")
    violationRules {
        failOnViolation = true
        rule {
            limit {
                minimum = 0.7
            }
        }
    }
}

次のコマンドラインで実行できます。

./gradlew jacocoTestCoverageVerification

Gradle wrapper 4.4を使用しました。

0
SHoko

これが競争の例です

task wrapper(type: Wrapper){ 
     gradleVersion = '4.8' 
} 

plugins { 
    id 'Java' 
    id 'maven' 
    id "jacoco" 
} 

jacoco{ 
    toolVersion = '0.8.1' 
} 

jacocoTestCoverageVerification { 
    violationRules { 
        rule { 
            limit { 
                minimum = 0.5 
            } 
        } 
    } 
} 


jacocoTestReport { 
     reports { 
        csv.enabled false 
        xml.enabled false 
        html { 
            enabled true 
            destination file("$buildDir/reports/jacoco") 
        } 
    } 
   executionData(test) 
} 

tasks.build.dependsOn(jacocoTestReport) 

test{ 
    jacoco{ 
        append = false 
        destinationFile = file("$buildDir/jacoco/jacocoTest.exec") 
        classDumpDir = file("$buildDir/jacoco/classpathdumps") 
    } 
} 
0
Ranjith Sekar