我正在尝试让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
我究竟做错了什么?
8 回答
尝试使用
Nexus device
(5或5x)生成调试覆盖率报告,它将完美地工作 . 我遇到了与Samsung devices
相同的问题(coverage.ec为空)但之后我用Nexus 5x
运行它,一切正常 .Jacoco应该在
android
闭包内,并且jacoco插件声明不是必需的:有's a problem in the Android Gradle Plugin 0.14.0 that generates an empty coverage.ec file. It'已知并已在一个分支中修复但似乎尚未向公众发布: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插件是无用的 .
我使用相同的gradle.build,只需在下面输入命令到终端 . 它给了我一个html页面的报道和测试结果 .
另一个建议是;进入终端
它打开一个gui窗口,你可以找到正确的命令 .
我从Jacoco code coverage in Android Studio with flavors找到了同样问题的解决方案 . 它有示例在生成coverage.ec而不是
testDebug.exec
的情况下该怎么做 .我创建了
jacocoTestReport
任务 .我执行
$./gradlew createDebugCoverageReport
,生成coverage.ec
文件之后我执行了
$./gradlew jacocoTestReport
并创建了HTML .有时由于底层硬件的某些安全限制,您无法获得覆盖率报告 . 在我的情况下,我使用android:sharedUserId =“android.uid.system”,由于这个原因,它没有拿起任何报道,并给了我一个空文件 .
所以我同意naran你应该尝试在不同的设备上运行它并确保你的应用程序不使用android:sharedUserId =“android.uid.system” .
现在(2015年10月)您可以将其用作android team has fixed the bug .
然后只需使用
./gradlew createDebugCoverageReport
.我做了一个有趣的观察 . 我遇到了同样的问题,
coverage.ec
文件的大小为0字节 . 我在这里尝试了所有答案以及这些答案:https://code.google.com/p/android/issues/detail?id=170607
它没有改变任何东西 . 我的
build.gradle
文件只有这些设置才能让jacoco工作:我的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
,有时它会显示正在拉动的文件 . 但也许在这两种情况下都无法在设备上找到它 . 因此,选择其他设备可以解决问题 . 祝好运!