カバレッジレポート出力(Gradle Jacoco Plugin)

Gradleでのカバレッジレポート出力には、「The JaCoCo Plugin」のプラグインを使用する。
Jacoco公式ドキュメント:jacoco公式

カバレッジについては、下記サイトなど参照。

atgo.rgsis.com

1. プラグインの追加

カバレッジレポートを出力したいプロジェクトの「build.gradle」にプラグインを追加する。

plugins {
    id 'java'
    id 'eclipse'
    // ↓追加
    id 'jacoco'
    // ↑追加
}

2. レポートの出力形式と出力場所の指定

カバレッジレポートはXML形式とHTML形式で出力される。
それぞれの形式のレポートに対して、レポートを出力するかどうかと、出力する際の出力場所の設定を行う。

plugins {
    id 'java'
    id 'eclipse'
    id 'jacoco'
}

// ↓追加
jacocoTestReport {
    reports {
         // XML形式のレポートを出力する
        xml.required = true
        // HTML形式のレポートを出力する
        html.required = true
        
        // XML形式のレポートの出力場所
        xml.outputLocation = file("${rootDir}/build/reports/coverage/${project.name}/jacocoTestReport.xml")
        // HTML形式のレポートの出力場所
        html.outputLocation = file("${rootDir}/build/reports/coverage/${project.name}/html")
    }
}
// ↑追加

3. 「check」タスクにレポート出力タスクを紐づける

デフォルトでは「build」タスク実行時にカバレッジレポートは出力されない。
「check」タスク実行時にカバレッジレポート出力タスクも実行されるように設定を追加する。

plugins {
    id 'java'
    id 'eclipse'
    id 'jacoco'
}

jacocoTestReport {
    reports {
        // XML形式のレポートを出力する
        xml.required = true
        // HTML形式のレポートを出力する
        html.required = true

        // XML形式のレポートの出力場所
        xml.outputLocation = file("${rootDir}/build/reports/coverage/${project.name}/jacocoTestReport.xml")
        // HTML形式のレポートの出力場所
        html.outputLocation = file("${rootDir}/build/reports/coverage/${project.name}/html")
    }
}

// ↓追加
// checkタスク実行時にカバレッジレポートを出力する
tasks.named('check') {
    dependsOn tasks.named('jacocoTestReport', JacocoReport) 
}
// ↑追加

4. カバレッジ除外対象のクラスの設定

デフォルトでは全てのクラスがカバレッジ取得対象となっているので、beanクラスなどはカバレッジの取得対象外とするように設定を追加する。

除外設定は、build.gradleファイルに記載する方法と、アノテーションGenerated)を付与することによって対象外にする方法とがある。 build.gradleファイルに記載する場合、antパスパターンでパスを指定する。

また、lombokで自動生成されたコードについては「ve/lombok.config」の「lombok.addLombokGeneratedAnnotation = true」の設定により、カバレッジ対象外とすることができる。

除外設定に関する詳しい説明は下記のページ参照。

www.baeldung.com

plugins {
    id 'java'
    id 'eclipse'
    id 'jacoco'
}

jacocoTestReport {
    reports {
        // XML形式のレポートを出力する
        xml.required = true
        // HTML形式のレポートを出力する
        html.required = true
        
        // XML形式のレポートの出力場所
        xml.outputLocation = file("${rootDir}/build/reports/coverage/${project.name}/jacocoTestReport.xml")
        // HTML形式のレポートの出力場所
        html.outputLocation = file("${rootDir}/build/reports/coverage/${project.name}/html")
    }

    // ↓追加
    // カバレッジ取得対象外とするパスを追加
    afterEvaluate {
        classDirectories.setFrom(files(classDirectories.files.collect {
            fileTree(dir: it, exclude: [
                // 定数クラス
                "jp/co/sample/aa/constant/*",
                // JavaConfig
                "jp/co/sample/aa/config/*"
            ])
        }))
    }
    // ↑追加
}

// checkタスク実行時にカバレッジレポートを出力する
tasks.named('check') {
    dependsOn tasks.named('jacocoTestReport', JacocoReport) 
}