※ 本記事で紹介している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用のプラグインを作ってくれている方がいたので、利用させていただきました。とても助かりました。ありがとうございます。
Maven Repositoryを追加します。プロジェクトによっては、プロジェクトの build.gradle.kts
に追加する場合もあると思います。
dependencyResolutionManagement {
// 略
repositories {
// 略
maven(url = "https://plugins.gradle.org/m2/")
}
}
プラグインをdependenciesに追加します。
buildscript {
dependencies {
// 追加
classpath("com.dicedmelon.gradle:jacoco-android:0.1.5")
}
}
plugins {
// 略
}
プラグインを適用し、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