[英]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
,该怎么做。
我创建了jacocoTestReport
任务。
我执行了$./gradlew createDebugCoverageReport
,它生成了coverage.ec
文件
$./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设置:
我尝试在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.