📊

Kotlinx-KoverのAndroidプロジェクト用設定メモ

2022/07/30に公開

Kotlinx-Kover

  • https://github.com/Kotlin/kotlinx-kover
  • Kotlinコードのカバレッジを出してくれるGradleプラグイン
    • Kotlin-Java混合コードでも追加設定無しで動作するとの記載があります
  • エージェントはIntelliJかJacocoを選択する
  • マルチモジュール構成のプロジェクトでも、ルートに設定を1つ書くだけでマージされたレポートを出力することができる

動作確認バージョン

  • 0.5.1
  • (多分)2022/07/30時点ではまだ製品版リリースになっていないので、APIの変更の可能性があります

導入方法

特定のBuildTypeのテストのみ集計するようにする

  • 何も指定をしないとすべてのBuildVariants分のテストカバレッジの集計を行います。
  • 例えばtestDebugUnitTestのみの集計を行いたい場合は、下記のように記載します
build.gradle.kts
testOptions {
    unitTests {
        all {
            // for kover
            it.extensions.configure(kotlinx.kover.api.KoverTaskExtension::class) {
                // Debugに対してのみkover実行
                if (it.name == "testDebugUnitTest") {
                    isDisabled = false
                    binaryReportFile.set(file("$buildDir/custom/debug-report.bin"))
                    includes = testIncludeList
                    excludes = testExcludeList
                } else {
                    isDisabled = true
                }
            }
        }
    }
}

Androidプロジェクト用のexclude設定

自動生成ファイルのexclude

  • 下記自動コード生成を行うライブラリを使っている場合のexclude設定です
    • Dagger/Hilt
    • DataBinding
    • Navigation component
build.gradle.kts
val testExcludeList: List<String> = listOf(
    // Android
    "*BuildConfig*",
    // Dagger/Hilt
    "*_*Factory*",
    "*_ComponentTreeDeps*",
    "*Hilt_**",
    "*HiltWrapper_*",
    "*_Factory*",
    "*_GeneratedInjector*",
    "*_HiltComponents*",
    "*_HiltModules*",
    "*_HiltModules_BindsModule*",
    "*_HiltModules_KeyModule*",
    "*_MembersInjector*",
    "*_ProvideFactory*",
    "*_SingletonC*",
    "*_TestComponentDataSupplier*",
    // DataBinding
    "*BR*",
    "*DataBinderMapperImpl*",
    "*Binding*",
    "*BindingImpl*",
    "DataBindingTriggerClass*",
    // Navigation
    "*FragmentDirections*",
    "*FragmentArgs*",
)
  • また、自アプリのコードだけ集計するよう、include設定も記載しておきます
build.gradle.kts
val testIncludeList: List<String> = listOf("com.example.*")
  • 上記exclude、include設定をkoverMergedHtmlReportタスクに対して設定します
build.gradle.kts
tasks.koverMergedHtmlReport {
    isEnabled = true
    htmlReportDir.set(layout.buildDirectory.dir("${rootProject.rootDir}/codeCheck/reports/kover/${project.name}.html"))
    includes = testIncludeList
    excludes = testExcludeList
}
  • 以上の設定をした上で、koverMergedHtmlReportタスクを実行します
  • 自動生成コードが除外された自アプリのコードのみの複数モジュールをまとめたカバレッジが、指定した箇所へ出力されます

おわりに

  • Kotlinx-KoverをAndroidプロジェクトで使う際の設定に少しはまったので備忘として残しました
  • GradleのJaCoCo Report Aggregation pluginも出てきたのでこちらがどうなるかはわからないですが、もし使う際の役に立ったら幸いです

Discussion