okuzawatsの日記

Android / Kotlin / GitHub Actions Enthusiast 🤖

[Android] build.gradle.ktsでJaCoCoを動かす

profile

書いている人 モバイルアプリケーションアーキテクト(Android)として働いています。モバイルアプリケーションのアーキテクチャ、自動テスト、CI/CDに興味があります。もっと詳しく

※ 本記事で紹介しているarturdm/jacoco-android-gradle-pluginを用いる方法は、Gradle 8では動かないようです。Fixed build crash in gradle 8.0に修正のPRが作成されていますが、本日現在、まだマージはされておりません。代わりに、thsaravana/jacoco-android-playgroundを参考にしてGradleのタスクを作成する方法があります。

AndroidのGradleの設定ファイルを build.gradle から build.gradle.kts に書き換えた時、JaCoCoをセットアップする方法がわからなかったので頑張って動かしてみました。GradleとJaCoCoについてはよくわかっていないことが多いです。プロジェクトを以下のリポジトリにpushしてあります。

JaCoCoのセットアップのために、Android用のプラグインを作ってくれている方がいたので、利用させていただきました。とても助かりました。ありがとうございます。

プロジェクトのsettings.gradle.kts

Maven Repositoryを追加します。プロジェクトによっては、プロジェクトの build.gradle.kts に追加する場合もあると思います。

dependencyResolutionManagement {
  // 略
  repositories {
    // 略
    maven(url = "https://plugins.gradle.org/m2/")
  }
}

プロジェクトのbuild.gradle.kts

プラグインをdependenciesに追加します。

buildscript {
  dependencies {
    // 追加
    classpath("com.dicedmelon.gradle:jacoco-android:0.1.5")
  }
}

plugins {
  // 略
}

モジュールのbuild.gradle.kts

プラグインを適用し、JaCoCoのバージョン、出力するカバレッジレポートの種別、カバレッジレポートの有効化を行います。

plugins {
  // 略
  id("com.dicedmelon.gradle.jacoco-android")
}

jacoco {
    toolVersion = "0.8.8"
}

tasks.withType<JacocoReport> {
    reports {
        csv.required.set(false)
        html.required.set(true)
        xml.required.set(true)
    }
}

android {
  // 略
  buildTypes {
    debug {
      enableUnitTestCoverage = true
    }
    // 略
  }
  // 略
}

dependencies {
  // 略
}

カバレッジレポートの出力

ユニットテスト実行後、コマンドを実行します。jacoco~ のコマンドは、プラグインが作ってくれるタスクです。

$ ./gradlew testDebugUnitTest
$ ./gradlew jacocoDebugUnitTest

app モジュールの場合は、app/build/jacoco/ にカバレッジレポートが出力されます。

カバレッジレポートのマージ

モジュールごとに出力されたカバレッジレポートをマージする方法がわからなくて困っていたのですが、@t179aさんが教えてくれました。ありがとうございました。

kotlinx-koverを使うと実現できました。

まずはプロジェクトのbuild.gradleにkoverを追加して、有効化します。

plugins {
    id("org.jetbrains.kotlinx.kover") version "0.6.1" // 追加
}

koverMerged {
    enable() // 追加
}

次に、各モジュールのbuild.gradleにkoverを追加します。

plugins {
    id("org.jetbrains.kotlinx.kover") // 追加
}

以下のコマンドで build/reports/kover/merged/ にマージされたテストレポートが出力されました。

% ./gradlew koverMergedReport

References

Related