Car*_*men 4 junit android gradle jacoco kotlin
我正在使用 Android Gradle 插件 3.0.0。
我正在将一个 Android 应用程序从 java 迁移到 kotlin。我的应用程序包含 Java 和 Kotlin 类,测试使用 Java。
我跑./gradlew clean jacocoTestReport。
这将运行单元测试 ( src/test) 和仪器测试 ( src/androidTest)。
jacoco in 生成的报告app/build/reports/jacoco/jacocoTestReport/html/index.html没有显示单元测试确实涵盖了 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"
])
}
Run Code Online (Sandbox Code Playgroud)
我必须includeNoLocationClasses = true按如下方式添加到我的 gradle 文件中,以使 jacoco 报告反映单元测试对 Kotlin 类的覆盖:
android {
testOptions {
unitTests {
all {
jvmArgs '-noverify', '-ea'
jacoco {
includeNoLocationClasses = true
}
}
includeAndroidResources = true
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:此解决方案适用于从命令行运行测试,但在从 Android Studio 内部使用覆盖率运行时,我仍然获得 0% 的覆盖率。
| 归档时间: |
|
| 查看次数: |
2765 次 |
| 最近记录: |