Android Gradle Plugin 3.0.0을 사용하고 있습니다.Jacoco가 Android 프로젝트에서 유닛 테스트를 통해 Kotlin 클래스의 0 커버리지를보고했습니다.
자바에서 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 Studio 내부의 코드 적용 범위에는 문제가 있지만 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"
])
}