📊
Kotlinx-KoverのAndroidプロジェクト用設定メモ
Kotlinx-Kover
- https://github.com/Kotlin/kotlinx-kover
- Kotlinコードのカバレッジを出してくれるGradleプラグイン
- Kotlin-Java混合コードでも追加設定無しで動作するとの記載があります
- エージェントはIntelliJかJacocoを選択する
- マルチモジュール構成のプロジェクトでも、ルートに設定を1つ書くだけでマージされたレポートを出力することができる
- Gradle7.4で同様のことができる、JaCoCo Report Aggregation pluginというのが出たようですが自分では試せていません
動作確認バージョン
- 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設定
- Jacocoで行っていたようなexclude設定を行うことができるのですが、記載方法が若干違っていました
- https://github.com/Kotlin/kotlinx-kover/issues/186#issuecomment-1143551467 こちらのissueコメントにあるように、現時点ではドット無しのワイルドカードで挟んであげると除外できるようです
自動生成ファイルの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