【问题标题】:Android studio code coverage not showing any Kotlin classesAndroid Studio 代码覆盖率未显示任何 Kotlin 类
【发布时间】:2018-01-31 04:22:51
【问题描述】:

我有 2 个基于 Kotlin 的 AS 项目。一个工作正常,另一个不行。两者都具有相同的结构和 gradle 配置。我将 Kotlin 1.1.4-2 与 AS 3.0b2 一起使用。

问题是当我运行代码覆盖率时,我正在测试的类甚至没有出现在覆盖率报告下。我看到的唯一内容是 R.java 和 BuildConfig.java,但没有找到我的源文件。

所有源文件均基于 Kotlin。我正在使用 Spek 进行单元测试。与我的其他功能项目相同的设置和版本。我尝试同时使用 JaCoCo 和 Jetbrains 代码覆盖率,但都不起作用。

抱歉,我还不能嵌入图片。

这就是问题所在:

这是我的项目结构:

这是我的 gradle android 块:

compileSdkVersion 26
buildToolsVersion "26.0.1"

defaultConfig {
    minSdkVersion 16
    targetSdkVersion 26
    versionCode 1
    versionName libraryVersion
}

buildTypes {
    debug {
        testCoverageEnabled = true
    }
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

和我的依赖:

implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation "io.reactivex.rxjava2:rxkotlin:2.1.0"

testImplementation 'junit:junit:4.12'
testImplementation "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
testImplementation 'org.jetbrains.spek:spek-api:1.1.2'
testImplementation 'org.jetbrains.spek:spek-junit-platform-engine:1.1.2'
testImplementation 'org.junit.platform:junit-platform-runner:1.0.0-M4'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.0.0-M4'

implementation 'com.android.support:appcompat-v7:26.0.1'

implementation 'com.squareup.okhttp3:okhttp-ws:3.3.1'
implementation 'com.google.protobuf:protobuf-java:2.6.1'

我试过跑步

task copyTestClasses(type: Copy) {
  from "build/tmp/kotlin-classes/debugUnitTest"
  into "build/intermediates/classes/debug"
}

task copySdkClasses(type: Copy) {
  from "build/tmp/kotlin-classes/debug"
  into "build/intermediates/classes/debug"
}

在我的测试之前,这也不起作用。

奇怪的是我的另一个项目,使用相同的 AS 版本、Kotlin 版本和项目结构,工作正常并生成适当的代码覆盖率。

任何帮助将不胜感激。

【问题讨论】:

标签: android android-studio unit-testing kotlin code-coverage


【解决方案1】:

尝试使用 JaCoco 进行覆盖,这是 IntelliJ IDEA 问题:Kotlin inline keyword causing IntelliJ IDEA Coverage reporting 0%

如何使用 JaCoco 获取覆盖范围: Making Android Studio Test Coverage works

简历:

  1. 点击编辑配置

  1. 转到运行/调试配置 -> 默认值 -> Android JUnit -> 代码覆盖率

  1. 选择覆盖亚军:选择 JaCoCo

  2. 应用->确定

  3. 再次运行您的测试,瞧,您将获得覆盖率

【讨论】:

  • 但这对构建服务器有何帮助?
【解决方案2】:

Kotlin 宣布了与 JaCoCo 和 IntelliJ 兼容的新 kotlinx-kover Gradle 插件。
它解决了 inline 函数的问题,也许还有更多。

plugins {
     id("org.jetbrains.kotlinx.kover") version "0.4.1"
}

一旦应用,该插件无需额外配置即可开箱即用。

观看其YouTube announcement video 并从this youtrack issue 跟踪其路线图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 2016-09-14
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    相关资源
    最近更新 更多