在一个Android项目中,Jacoco报告了Kotlin类的unit testing覆盖率
我正在使用Android Gradle插件3.0.0。
我正在将一个Android应用程序从java移植到kotlin。 我的应用程序在Java和Kotlin中有类,测试用Java。
我运行./gradlew clean jacocoTestReport
。
这运行unit testing( src/test
)和仪器测试( src/androidTest
)。
jacoco在app/build/reports/jacoco/jacocoTestReport/html/index.html
中生成的报告没有显示确实被unit testing覆盖的Kotlin类的覆盖率。
报告确实显示了仪器测试的覆盖范围。
注:我遇到了这些其他问题,这是不完全相同的问题:
- JaCoCo返回0%Kotlin和Android 3.0的覆盖率在仪器测试代码覆盖率方面存在问题,而不是unit testing。
- Android Studio JaCoCo报告0%的覆盖率在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" ]) }
我不得不将includeNoLocationClasses = true
添加到我的gradle文件中,如下所示,以使jacoco报告通过unit testing来反映Kotlin类的覆盖率:
android { testOptions { unitTests { all { jvmArgs '-noverify', '-ea' jacoco { includeNoLocationClasses = true } } includeAndroidResources = true } } }
注意:此解决方案适用于从命令行运行测试,但在Android Studio内运行覆盖范围时仍可获得0%的覆盖率。
- 来自内部存储的Intent.ACTION_SEND PDF文件仅适用于某些应用程序
- android – 运行应用程序失败,错误“com.android.builder.dexing.DexArchiveMergerException:无法合并dex’
- 动态地动画BottomSheet peekHeight
- Android:创建较短版本的findViewById – 未经检查的转换
- Kotlin抛出NullPointerexception
- 当使用Mockito和kotlin时,只允许在类文字的左侧使用类
- 用Android写入数据库
- 在kotlin android中可以使活动布局的背景变得透明吗?
- 匕首2在Kotlin未解决的参考