【问题标题】:Coverage report says zero coverage on android with gradle覆盖率报告说 gradle 对 android 的覆盖率为零
【发布时间】:2015-03-11 17:23:32
【问题描述】:

我无法在我的任何 android 项目上获得代码覆盖率。

为了简化事情,我创建了一个新项目(选定的空活动)。 在 src/main/java 中的项目中添加了一个新的实用程序类。

然后我在 src/androidTest/java 中为它创建了一个单元测试。

更新了 gradle 文件以启用覆盖。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.michaelkrussel.coverageapp"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }

    jacoco {
        version "0.7.1.201405082137"
    }

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

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
}

我运行了测试,然后使用 ./gradlew createDebugCoverageReport。单元测试显示我创建的测试通过了,但是覆盖率报告报告零覆盖率。

我假设我在 gradle 文件中遗漏了一些东西,或者没有运行正确的 gradle 任务,但我不知道是什么。

【问题讨论】:

  • 尝试添加在 defaultConfig { testApplicationId "your.package.test"}
  • @anderson_acs 尝试添加它,但我仍然有一个空的coverage.ec 文件,报告显示 0 覆盖率。

标签: java android android-gradle-plugin jacoco


【解决方案1】:

我在我的项目中使用这个配置并且工作正常!

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        applicationId "br.com.acs.app"
        minSdkVersion 18
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
        testApplicationId "br.com.acs.app.test"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

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

    packagingOptions {
        exclude 'LICENSE.txt'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'

    androidTestCompile 'junit:junit:4.11'
    androidTestCompile('com.android.support.test:testing-support-lib:0.1') {
        exclude group: 'junit' 
    }
}

【讨论】:

  • 我看到您包含 junit 4。您是在运行标准 Java 单元测试还是在运行 android 仪器测试?
  • 是的!我正在运行仪器测试。
  • 很好地处理我们的 gradle 文件仍然没有解决我的问题,但确实告诉我这不是 gradle 配置问题。我决定尝试在不同的设备上运行测试,一切都开始工作了。无法使用的设备是运行 Android 4.4.2 的 Nexus S4 mini。我还尝试了一个使用 Android 4.4.2 的模拟器,它工作正常。所以问题似乎是我的特定设备(不确定是什么)。感谢您向我展示了一个工作示例。我还了解了看起来很酷的 testing-support-lib。
  • 是的 Michael Krussel 是对的,我遇到了同样的问题,我对三星 Galaxy S4 (4.4.2) 进行了广泛的实验,它给了我一个空的 coverage.ec 但是当我尝试使用 LG 的相同配置时-Nexus 5 (5.1.1) 运行良好。另外,您要在哪里查找 *.exec 或 *.ec 文件?查看您的项目目录/build/outputs/code-coverage/connected/coverage.ec
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
相关资源
最近更新 更多