【问题标题】:How can i run Jacoco in android studio for code coverage我如何在 android studio 中运行 Jacoco 以进行代码覆盖
【发布时间】:2015-03-01 06:12:53
【问题描述】:

我已经在 android studio 中进行了调试。我的应用程序模块的 gradle 配置文件包含以下内容:

debug{
    testCoverageEnabled true
}

然后我在终端中运行以下命令:

gradlew createDebugCoverageReport

确实我收到了一份报告,但该应用程序也因只读错误而崩溃,我似乎无法弄清楚。我正在使用Mac。这是堆栈跟踪:

 **java.io.FileNotFoundException: /jacoco.exec: open failed: EROFS (Read-only file system)**
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:416)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at org.jacoco.agent.rt.internal_932a715.output.FileOutput.openFile(FileOutput.java:67)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at org.jacoco.agent.rt.internal_932a715.output.FileOutput.startup(FileOutput.java:49)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at org.jacoco.agent.rt.internal_932a715.Agent.startup(Agent.java:122)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at org.jacoco.agent.rt.internal_932a715.Agent.getInstance(Agent.java:50)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at org.jacoco.agent.rt.internal_932a715.Offline.<clinit>(Offline.java:31)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at mypackage.org.duckduck.MainApplication.$jacocoInit(MainApplication.java)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at mypackage.org.duckduck.MainApplication.<clinit>(MainApplication.java)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at java.lang.Class.newInstanceImpl(Native Method)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at java.lang.Class.newInstance(Class.java:1319)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at android.app.Instrumentation.newApplication(Instrumentation.java:983)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at android.app.Instrumentation.newApplication(Instrumentation.java:968)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at android.app.LoadedApk.makeApplication(LoadedApk.java:499)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4480)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at android.app.ActivityThread.access$1300(ActivityThread.java:146)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:99)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at android.os.Looper.loop(Looper.java:137)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5168)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:511)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:564)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: EROFS (Read-only file system)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at libcore.io.Posix.open(Native Method)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:400)
03-01 00:04:56.871  19006-19006/mypackage.org.duckduck W/System.err﹕ ... 24 more

【问题讨论】:

    标签: android android-studio code-coverage jacoco


    【解决方案1】:

    我在 USB 设备上运行 jacoco 时遇到了同样的问题。 使用 Genymotion 解决了这个问题。

    【讨论】:

      【解决方案2】:

      因为,我没有看到你的整个 gradle 文件我不确定你是否已经有了正确的方法,但一个建议是如果你在 gradle 文件中,不要明确应用 jacoco 插件。 Gradle 的最新版本与 JaCoCo 一起打包。

      直到最近我尝试不使用该行时,这才打破了我的测试。

      另一件事是我只是跑

      gradle connectedCheck

      从终端(Mac)或命令提示符(Windows),这会为我生成 html 代码覆盖率报告。

      希望尝试此方法也能解决您的问题。

      【讨论】:

      • 这不是我的问题。我意识到 jacoco 已经在我没有更新摇篮的情况下。你在android studio中试过了吗?
      • @mistwalker 我注意到如果测试失败,不会生成 html 报告,你有同样的问题吗?
      【解决方案3】:

      这个警告似乎无关

      以读写方式挂载根文件系统时错误信息消失

      mount -o remount,rw rootfs /
      

      ,只是为所有用户设置写权限(只能在模拟器上这样做!!!,真的很不安全)

      chmod 777 /
      

      不幸的是,我的测试前后都被破坏了,更改它根本无法修复它们。

      因此,除非存在真正的问题,否则您可以将此视为不需要采取任何措施的消息

      【讨论】:

        猜你喜欢
        • 2015-03-21
        • 2015-05-21
        • 2013-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-05
        • 2017-07-09
        • 2018-05-31
        相关资源
        最近更新 更多