[英]Jacoco code covergage file empty leading to false coverage reports
可以在此处找到包含用于此问题的代码的Github仓库: https : //github.com/thenewmr/UnitTestCoverageExample
我们一直在努力通过正确生成的Jacoco获取代码覆盖率报告。
我们已经跟踪了互联网上的各种指南,包括帕特里克迈凯轮的 这个指南,他在回答这个问题时联系了这个指南。
我们还看了关于堆栈溢出的各种问题但到目前为止还没有快乐。
这是我们到目前为止所用的内容(以子弹点的形式,以免使这个问题太长而无法阅读):
testCoverageEnabled = true
添加到调试闭包创建了一个名为“createDebugCoverageReport”的任务 运行此任务:
现在,如果我们添加以下内容:
apply plugin: 'jacoco' //specify which directories should be examined by jacoco def coverageSourceDirs = [ 'src/main/java' ] task jacocoTestReport(type:JacocoReport, dependsOn: "testDebug") { group = "Reporting" description = "Generate Jacoco coverage reports" classDirectories = fileTree( dir: 'build/intermediates/classes/debug', excludes: ['**/R.class', '**/R$*.class', '**/*$ViewInjector*.*', '**/BuildConfig.*', '**/Manifest*.*'] ) additionalSourceDirs = files(coverageSourceDirs) sourceDirectories = files(coverageSourceDirs) executionData = files('build/jacoco/testDebug.exec') reports { xml.enabled = true html.enabled = true } }
到app的build.gradle文件(有或没有上面的位)并运行jacocoTestReport,我们得到:
因此,我们获得了vanilla单元测试的正确内容,但没有获得Android单元测试。
上面提到的博客文章讨论了如何结合这两个报告。 但是,如果我们无法获得首先生成的Android测试覆盖率报告,那似乎毫无意义。
问题似乎是由于前面提到的空的coverage.ec文件。
这个答案说这曾经是一个错误: https : //stackoverflow.com/a/28080713/487812
这个错误报告说这个问题已修复: https : //code.google.com/p/android/issues/detail?id = 78556
但也许它已被重新引入,因为它是回归? 我们缺少明显的东西吗?
虽然nius的答案是正确的,但下面的信息是我们特定问题的解决方案。
事实证明,出于某些奇怪的原因,在三星设备上运行测试会产生空的覆盖文件。 在模拟器或非三星手机上运行相同的测试产生了预期的结果。
在此处包含此信息,以便人们了解这一点。
现在(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
。 在app/build/reports/coverage/debug/index.html
查找报告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.