繁体   English   中英

Jacoco代码覆盖文件空白导致虚假覆盖报告

[英]Jacoco code covergage file empty leading to false coverage reports

可以在此处找到包含用于此问题的代码的Github仓库: https//github.com/thenewmr/UnitTestCoverageExample

我们一直在努力通过正确生成的Jacoco获取代码覆盖率报告。

我们已经跟踪了互联网上的各种指南,包括帕特里克迈凯轮的 这个指南,他在回答这个问题时联系了这个指南。

我们还看了关于堆栈溢出的各种问题但到目前为止还没有快乐。

这是我们到目前为止所用的内容(以子弹点的形式,以免使这个问题太长而无法阅读):

  • testCoverageEnabled = true添加到调试闭包创建了一个名为“createDebugCoverageReport”的任务
  • 运行此任务:

    • 为我们的Android测试生成报告:app / build / outputs / reports / androidTests / connected / index.html,准确报告测试通过和失败等
    • 但是在app / build / outputs / reports / coverage / debug / index.html上的覆盖率报告不准确(0%覆盖率)
    • 它还会在以下位置生成看似空的覆盖率数据:app / build / outputs / code-coverage / connected / coverage.ec
  • 现在,如果我们添加以下内容:

     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 Unit的测试报告在:app / build / reports / tests / debug / index.html进行测试
  • app / build / reports / jacoco / jacocoTestReport / html / index.html上的准确代码覆盖率报告

因此,我们获得了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.

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