gpt4 book ai didi

android - Jacoco 代码覆盖率文件为空导致错误的覆盖率报告

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:51 26 4
gpt4 key购买 nike

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

我们在尝试通过 Jacoco 正确生成代码覆盖率报告时遇到了严重问题。

我们遵循了互联网上的各种指南,包括 this one来自 Patrick McLaren他链接到他的answer对此question .

我们还查看了有关堆栈溢出的各种问题,但目前还没有任何乐趣。

这是我们目前的情况(以要点形式表示,以免这个问题太长而难以阅读):

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

    • 为我们的 Android 测试生成报告:app/build/outputs/reports/androidTests/connected/index.html,其中包含测试通过和失败等的准确报告
    • 但不准确的覆盖率报告(0% 覆盖率)位于:app/build/outputs/reports/coverage/debug/index.html
    • 它还在以下位置生成看似空的覆盖率数据: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
    }
    }

到应用程序的 build.gradle 文件(有或没有上面的位)并运行 jacocoTestReport,我们得到:

  • 原始单元测试的测试报告位于:app/build/reports/tests/debug/index.html
  • 准确的代码覆盖率报告位于 app/build/reports/jacoco/jacocoTestReport/html/index.html

因此,我们得到了普通单元测试的正确内容,但 Android 单元测试却没有。

blog post上面讲了如何结合两个报表。但是,如果我们不能首先生成 Android 测试覆盖率报告,这似乎毫无意义。

问题似乎是由于前面提到的空 coverage.ec 文件造成的。

这个答案说这曾经是一个错误: https://stackoverflow.com/a/28080713/487812

这个错误报告说这个问题已经解决了: https://code.google.com/p/android/issues/detail?id=78556

但也许它是作为回归重新引入的?我们是否遗漏了一些明显的东西?

最佳答案

虽然 nius 的回答是正确的,但下面的信息是我们特定问题的解决方案。

事实证明,由于某些奇怪的原因,在三星设备上运行测试会产生空的覆盖文件。在模拟器或非三星手机上运行相同的测试产生了预期的结果。

在此处包含此信息,以便人们了解这一点。

关于android - Jacoco 代码覆盖率文件为空导致错误的覆盖率报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31518642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com