繁体   English   中英

android jacoco覆盖空与gradle

[英]android jacoco coverage empty with gradle

我正在尝试让jacoco为我的android测试项目创建一个代码覆盖率报告。 我在build.gradle中有以下内容:

apply plugin: 'com.android.application'
apply plugin: 'jacoco'
...
jacoco {
    toolVersion = "0.7.1.201405082137"
}
...
android {
    buildTypes {
        release {
        }
        debug {
            testCoverageEnabled true
        }
    }
}

当我运行gradlew -i createDebugCoverageReport时,我得到一个覆盖率报告,但它是空的。 gradle执行结束如下:

:androidTest:connectedAndroidTest (Thread[main,5,main]) completed. Took 2 mins 36.951 secs.
:androidTest:createDebugCoverageReport (Thread[main,5,main]) started.
:androidTest:createDebugCoverageReport
Executing task ':androidTest:createDebugCoverageReport' (up-to-date check took 0.006 secs) due to:
  Output file /home/akos/src/androidTest/build/outputs/reports/coverage/debug has changed.
  Output file /home/akos/src/androidTest/build/outputs/reports/coverage/debug/index.html has been removed.
  Output file /home/akos/src/androidTest/build/outputs/reports/coverage/debug/.resources/package.gif has been removed.
[ant:reportWithJacoco] Loading execution data file /home/akos/src/androidTest/build/outputs/code-coverage/connected/coverage.ec
[ant:reportWithJacoco] Writing bundle 'debug' with 3 classes
:androidTest:createDebugCoverageReport (Thread[main,5,main]) completed. Took 0.215 secs.

BUILD SUCCESSFUL

Total time: 4 mins 53.467 secs

实际上,上面引用的coverage.ec文件为空(长度为0)

在目录build / intermediates / coverage-instrumented-classes /中,我似乎有了已检测的类文件

这是gradle 2.1

我究竟做错了什么?

尝试使用Nexus device (5或5x)生成调试覆盖率报告,它将完美运行。 我遇到了与Samsung devices相同的问题(coverage.ec是空的),但之后我用Nexus 5x运行它,一切正常。

Jacoco应该在android闭包内,并且jacoco插件声明不是必需的:

apply plugin: 'com.android.application'
...
android {
    buildTypes {
        release {
        }
        debug {
            testCoverageEnabled true
        }
    }
    jacoco {
        toolVersion = "0.7.1.201405082137"
    }
}

我使用相同的gradle.build,只需在下面输入命令到终端。 它给了我一个html页面的报道和测试结果。

$。/ gradlew createDebugCoverageReport

另一个建议是; 进入终端

$。/ gradlew --gui

它打开一个gui窗口,你可以找到正确的命令。

Android Gradle Plugin 0.14.0中存在一个问题,即生成一个空的coverage.ec文件。 它已知并已在一个分支机构中修复但似乎尚未向公众发布: https//code.google.com/p/android/issues/detail?id = 78556

另一方面,可以使用Jacoco和RoboElectric找到适用于Android Studio的可爱解决方案模板项目: https//github.com/nenick/android-gradle-template

因此,您可以等待谷歌修复它或使用其他人的构建库存储库,但Android Studio 1.0.0的gradle插件是无用的。

我从Android Studio中的Jacoco代码覆盖中找到了解决同样问题的解决方案。 它有一个例子,如果生成coverage.ec而不是testDebug.exec ,该怎么做。

  1. 我创建了jacocoTestReport任务。

  2. 我执行了$./gradlew createDebugCoverageReport ,它生成了coverage.ec文件

  3. 之后我执行$./gradlew jacocoTestReport并创建HTML。

有时由于底层硬件的某些安全限制,您无法获得覆盖率报告。 在我的情况下,我使用android:sharedUserId =“android.uid.system”,由于这个原因,它没有拿起任何报道,并给了我一个空文件。

所以我同意naran你应该尝试在不同的设备上运行它并确保你的应用程序不使用android:sharedUserId =“android.uid.system”。

我做了一个有趣的观察。 我有同样的问题, coverage.ec文件的大小为0字节。 我在这里尝试了所有答案以及这些答案:

https://code.google.com/p/android/issues/detail?id=170607

它没有改变任何东西。 我的build.gradle文件只有这些设置让jacoco工作:

apply plugin: 'com.android.application'
apply plugin: 'jacoco'

android {
    ...
buildTypes {
   ...
    debug {
        testCoverageEnabled true
    }
}

...
}

我的Android Studio版本是1.2.2。 我在“文件 - >项目结构”中有以下gradle设置:

  • Gradle版本:2.2.1
  • Android插件版本:1.2.3

我尝试在Motorola Moto G 4G LTE - Android 4.4.4上使用gradlew cC运行仪器测试,正确运行了仪器测试,但是带有0字节的coverage.ec文件。 今天我尝试了另一种设备: LG Spirit 4G LTE - Android 5.0 ,现在代码覆盖正常! coverage.ec文件有322个字节,我看到正确的html覆盖率报告。

我认为有时候使用gradlew cC --debug运行gradle会显示在设备上找不到coverage.ec ,有时它会显示文件被拉出。 但也许在这两种情况下都无法在设备上找到它。 因此,选择其他设备可以解决问题。 祝好运!

现在(2015年10月)你可以使用它,因为android团队修复了这个bug

android {
    ...
    buildTypes {
        debug {
            testCoverageEnabled true
        }
    }
    ...
    dependencies{
        androidTestCompile 'com.android.support.test:runner:0.4.1'
        // Set this dependency to use JUnit 4 rules
        androidTestCompile 'com.android.support.test:rules:0.4.1'
        // Set this dependency to build and run Espresso tests
        androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
        // Espresso-contrib for DatePicker, RecyclerView, Drawer actions, Accessibility checks, CountingIdlingResource
        androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.1'
    }
}

然后使用./gradlew createDebugCoverageReport

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM