【问题标题】:Jacoco converting coverage.ec to reports without coverage.emJacoco 将coverage.ec 转换为没有coverage.em 的报告
【发布时间】:2015-05-16 09:05:38
【问题描述】:

我可以按照以下步骤获取代码覆盖率报告,

  1. 启用对所需构建类型的覆盖(例如调试)

    buildTypes { debug { testCoverageEnabled true } }

  2. 应用 Jacoco 插件并设置版本

    apply plugin: 'jacoco' jacoco { version "0.7.1.201405082137" }

  3. 运行

    ./gradlew createDebugCoverageReport

  4. connectedAndroidTest 中的所有测试都运行并基于它们生成覆盖率报告。我可以在

    中找到覆盖率报告

    app/build/outputs/reports/coverage/{buildType}/index.html

还有一个coverage.ec文件

app/build/outputs/code-coverage/connected/coverage.ec

但没有 jacoco.exec,因为我是从 Android Instrumentation 而不是 Robolectric 测试用例运行的。

当我从 ADB 运行仪器时(我猜这仍在使用 Emma),我得到一个 coverage.ec 文件,如下所示,

$ adb shell am instrument -w -e coverage true -e coverageFile /sdcard/coverage.ec com.sample.helloworld.test/.Runner
....
OK (4 tests)

Generated code coverage data to /sdcard/coverage.ec

但我无法将 coverage.ec 转换为使用 emma 的报告,因为缺少 coverage.em 文件,

java -cp ~/adt-bundle-mac-x86_64-20130729/sdk/tools/lib/emma_device.jar emma report -r html -in \
coverage.em,myFile.ec,myapp_coverage1.ec -sp /path/to/myapp/src

有没有办法解决这个问题?

【问题讨论】:

    标签: android android-studio android-gradle-plugin jacoco emma


    【解决方案1】:

    要从 coverage.ec 文件中获取覆盖率,只需将其重命名为 coverage.exec 并使用“显示覆盖率数据”选项打开它

    显示覆盖率数据”可以在 Android Studio 的“Analyze”选项下找到。

    使用 Android Studio 3.3 验证了这一点

    【讨论】:

      【解决方案2】:

      删除 .从下面的命令它对我的工作

      java -jar android-jacoco-the-missing.jar -f /path/to/coverage.ec -p /path/to/android/project
      

      【讨论】:

        【解决方案3】:

        我写了一篇关于相同场景和我的解决方案的文章。 You can read it here。要回答这个特定问题,您应该执行以下步骤: 将 gradle 更改为:

        apply plugin: 'jacoco'
        jacoco {
           toolVersion = '0.7.5.201505241946'
        }
        

        第二个download this jar。继续您所做的事情,直到您拥有coverage.ec 文件。然后当你运行它时:

        java -jar android-jacoco-the-missing.jar -f /path/to/coverage.ec -p ./path/to/android/project
        

        就是这样! jar 将生成一个包含代码覆盖率的文件夹。

        另一种选择是将coverage.ec 与Jenkins Jacoco 插件一起使用。但为此,您需要启用 Jenkins。

        【讨论】:

        • 执行 jar 总是给我FileNotFoundException。该文件在那里,我多次检查了路径。
        • 我确定它在正确的位置。我检查了很多次。我注意到的另一件事是 jar 想要坐在项目目录中并获取文件的相对路径,这不是很灵活。
        • 运行不带参数的jar,你会看到你有的选项
        • 有没有机会让这个 jar 生成 xml 报告?
        • 如果你使用 Jenkins,有一个插件可以做到。
        【解决方案4】:

        只需使用“coverage.ec”作为“.exec”文件,它对我有用

        这就是 Google 在 Android Gradle 插件源代码中所做的。

        public static final String FILE_COVERAGE_EC = "coverage.ec";

        在 com.android.builder.internal.testing 包下的 SimpleTestCallable.java 中。

        【讨论】:

        • 哇,是的,您可以简单地将文件重命名为 coverage.exec,然后在 Android Studio (2.0) 中的 Show Coverage Data 下可以选择它,您的所有代码都会在编辑器窗口中很好地突出显示。
        • @NicolasGramlich 我将其更改为 exec 并通过 Show Coverage Data 打开它 - 但它显示所有代码的 0%
        • @UrielFrankel 我遇到了同样的问题,你解决了吗?
        • 是的。我有。我深入研究了 jacoco 的代码并构建了一个 jar。经过大量的调整后,它可以工作了。
        猜你喜欢
        • 2013-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-23
        • 1970-01-01
        • 2019-09-27
        • 1970-01-01
        相关资源
        最近更新 更多