https://github.com/Kotlin/kotlinx-kover

jetbrain製のkotlin用テストカバレッジ計測ライブラリがありバージョン0.5前後のときは導入が難しかったのですが、0.7あたりから導入が簡単になりました。

Androidアプリのテストカバレッジは以前はjacocoなどが使われていましたが導入が難しかったり、java用のライブラリであったことから適切なコードカバレッジを測ってくれなかったり、Androidのマルチモジュールに対応していなくてレポートをマージする必要があったりと色々と面倒でした。

まずはカバレッジ計測したいモジュールのbuild.gradle.ktsに下記を追加します。マルチモジュールでもシングルモジュールでも同じです。

plugins {
    id("org.jetbrains.kotlinx.kover:0.7.1") // 2023年8月時点での最新版は0.7.3です。自分は0.7.1までの動作を確認
}

appモジュールのbuild.gradle.ktsに除外設定を追加します。

koverReport {
    filters {
        excludes {
            packages(
                "dagger*",
                "hilt*"
            )
            classes(
                "*Module_Provide*",
                "*Binding",
                "*_Factory",
                "*_HiltModules*",
                "*Hilt_*",
                "*BuildConfig",
                "*HiltWrapper_*",
                "*ComposableSingletons*",
                "*_MembersInjector*"
            )
        }
    }
}

除外設定は後述するHTMLレポートを出力しつつプロジェクトにあった設定を行ってください。サブクラスを除外したい場合は除外設定の末尾に*が必要です。

さらにappモジュールのbuild.gradle.ktsにカバレッジ計測したいモジュールを定義(追加)します。appモジュール自体の定義は不要です。

dependencies {
    kover(project(":moduleA")
    kover(project(":moduleB")
}

設定はほぼ終わりです。簡単ですね。sync project with gradle filesを実行後にターミナルから./gradlew tasks | grep koverを実行するとkoverのGradleタスクを確認できます。BuildVariantの設定により異なりますが./gradlew :app:koverHtmlReportDebugを実行するとプロジェクトルート/app/build/reports/kover/htmlDebug/index.htmlのHTMLレポートが出力されます。./gradlew koverXmlReportDebugを実行するとプロジェクトルート/app/build/reports/kover/reportDebug.xmlにXMLレポートが出力されます。ファイル名もタスク名と同様にBuildVariantによって異なります。

このHTMLをブラウザなどで確認してカバレッジに含めたくないファイルを除外設定に追加していくと綺麗なレポートが出来上がると思います。XMLレポートをcodecovと連携して時系列ごとのカバレッジの変化やGithubのにカバレッジバッジを表示できるのですが、それはまた別の機会に紹介します。