私はAndroid Gradle Plugin 3.0.0を使用しています。ヤココは、AndroidプロジェクトでユニットテストでKotlinクラスの0カバレッジを報告しています
私はjavaからkotlinにAndroidアプリを移行しています。私のアプリはJavaとKotlinでクラスを持ち、テストはJavaで行われています。
私は./gradlew clean jacocoTestReport
を実行します。
ユニットテスト(src/test
)と計測テスト(src/androidTest
)の両方を実行します。
app/build/reports/jacoco/jacocoTestReport/html/index.html
にjacocoによって作成されたレポートは、実際にユニットテストでカバーされているKotlinクラスのカバレッジを示していません。
このレポートには、計装テストからのカバレッジが正しく表示されます。
注:私は正確に同じ問題ではありませんこれらの他の質問、出くわした:
- JaCoCo returning 0% Coverage with Kotlin and Android 3.0は、計装のテストではなく、ユニットテストによって、コードカバレッジに問題があります。
- Android Studio JaCoCo reports 0% coverageには、Androidスタジオ内のコードカバレッジに問題がありますが、Kotlin固有の問題はありません。私のアプリモジュールのbuild.gradleの
関連する部分:
apply plugin: 'jacoco'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
...
android {
defaultConfig {
sourceSets {
main.java.srcDirs += "$projectDir/src/main/kotlin"
}
}
testOptions {
unitTests {
all {
jvmArgs '-noverify', '-ea'
}
includeAndroidResources = true
}
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
....
}
jacoco {
toolVersion '0.7.9'
}
task jacocoTestReport(type: JacocoReport, dependsOn: ["testDebugUnitTest", "createDebugCoverageReport"]) {
reports {
html.enabled = true
}
classDirectories = fileTree(
dir: "${buildDir}",
includes: ["tmp/kotlin-classes/debug/ca/rmen/android/poetassistant/**/*.class",
"intermediates/classes/debug/ca/rmen/android/poetassistant/**/*.class"],
excludes: ["**/R.class", "**/R*.class", "**/Manifest.class", "**/Manifest*.class", "**/BuildConfig.class",
// ignore databinding generated code:
"**/ca/rmen/android/poetassistant/databinding/*.class",
... other excludes ...
"**/ca/rmen/android/poetassistant/BR.class",
"**/com/android/**/*.class"])
sourceDirectories = files("${project.projectDir}/src/main/java", "${project.projectDir}/src/main/kotlin")
executionData = fileTree(
dir: "${buildDir}",
includes: [
"jacoco/testDebugUnitTest.exec",
"outputs/code-coverage/connected/*coverage.ec"
])
}