0

好吧,艾玛杀了我。我已经在这上面花了两天时间。

艾玛现在有两个问题

  1. 它通过单元测试部分崩溃
  2. 它抱怨班级邮票不匹配。: com.vladium.emma.EMMARuntimeException: [CLASS_STAMP_MISMATCH] runtime version of class xxx in the coverage data is not consistent with the version of this class in the metadata, possibly because stale metadata is being used for report generation.

虽然我可以忍受崩溃,但只是经常发生,但我不打算修复它,

INSTRUMENTATION_RESULT: shortMsg=进程崩溃。[执行] INSTRUMENTATION_CODE:0

但是,我确实希望看到我的报道结果。

我努力了:

  1. 清洁设备
  2. 消灭了整个工作区(在詹金斯)
  3. 使用命令提示符(绕过 jenkins、ant clean、ant emma debug install test)

我对这个错误的理解是安装的 apk 并且在单元测试中包含不同的二进制文件,因此它的元数据信息与生成的 coverage.em 是过时的。

我可以确认这在我的情况下是不可能的,因为我清理、清理甚至清除了整个工作空间和手机内存。现在对我来说没有任何意义。

请帮忙~

我正在使用 Android sdk r16、NDK 5c 以及 Ant 和 Emma 的默认设置。

4

2 回答 2

0

我在使用 EMMA for android 时也遇到了这个问题。这是因为您从 sdcard 中提取的 coverage.ec 与 coverage.em 不一致。尝试重建项目的检测版本。尝试以下步骤:

  1. 蚂蚁清洁释放
  2. 蚂蚁仪器
  3. 蚂蚁安装
  4. adb 拉 /mnt/sdcard/coverage.ec
  5. 使用coverage.em(通过步骤2在项目的bin文件夹下新生成)和coverage.ec生成覆盖率报告

有关详细信息,您可以参考EMMA for Android

于 2014-11-10T08:24:30.137 回答
0

我的 Android 项目(通过 JNI 使用本机代码第三方库)遇到了完全相同的问题。事实证明,在这种情况下,EMMA 错误消息有点误导。它被触发是因为主机上静态生成的覆盖率元数据 (coverage.em) 与设备上应用程序运行时收集的覆盖率数据 (coverage.ec) 不匹配。实际上,这不仅是“不匹配”,而且完全丢失了coverage.ec。这是由于原生代码崩溃:在 Android 上,原生代码崩溃也会关闭相关的 Java 进程,实际上甚至会重新启动 VM。这意味着 EMMA 也被杀死了,它不再有机会将 coverage.ec 文件刷新到磁盘,这就是它丢失的原因。

我想知道在崩溃之前让 EMMA 更频繁地刷新coverage.ec 文件是否有意义,但同样值得怀疑的是,不完整的覆盖信息的价值有多大

  1. 文件格式可能只是没有以一种对增量解析有意义的方式构建,
  2. 部分coverage.ec 仍然会与完整coverage.em 不匹配,
  3. 从部分coverage.ec 生成的覆盖率将报告关于套件中所有测试的错误覆盖率。

因此,长话短说,解决此问题的最佳方法是修复您的本机代码以免崩溃。

于 2012-09-17T12:00:41.687 回答