【发布时间】:2018-05-10 00:11:38
【问题描述】:
我正在使用 Android Gradle 插件 3.0.0。
我正在将一个 Android 应用程序从 java 迁移到 kotlin。我的应用程序有 Java 和 Kotlin 的类,并且测试是用 Java 编写的。
我运行./gradlew clean jacocoTestReport。
这将运行单元测试 (src/test) 和仪器测试 (src/androidTest)。
jacoco 在app/build/reports/jacoco/jacocoTestReport/html/index.html 中生成的报告没有显示单元测试确实涵盖了 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"
])
}
【问题讨论】:
标签: android gradle junit kotlin jacoco