2012-01-24 3 views
0

Хорошо, Эмма меня убивает. Я потратил два дня на это уже.Emma com.vladium.emma.EMMARuntimeException: [CLASS_STAMP_MISMATCH]

Там две проблемы с Эммой теперь

  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 = Процесс разбился. [exec] INSTRUMENTATION_CODE: 0

Однако, мне действительно нравится видеть результат моего покрытия.

Я попытался:

  1. чистое устройство
  2. уничтожила все рабочее пространство (в Jenkins)
  3. с помощью командной строки (обходные Дженкинс, муравей чистый, муравей эмма отладки установить тест)

Мое понимание этой ошибки - установленный apk, и в модульном тестировании содержит разные бинарные файлы, и, следовательно, информация о метаданных устарела, и сгенерированна зона покрытия.

Я могу подтвердить, что это НЕВОЗМОЖНО в моем случае, поскольку я очищаю, муравей очищает и даже уничтожает всю рабочую область и память телефона. Теперь это просто не имеет никакого смысла.

Пожалуйста ПОМОГИТЕ ~

Я использую Android SDK r16, NDK 5с и настройки по умолчанию из Ant и Эмма.

ответ

0

Я вижу ту же самую проблему с моим проектом Android (который использует встроенную библиотеку собственного кода через JNI). Оказывается, сообщение об ошибке EMMA в этом случае немного вводит в заблуждение. Это срабатывает, потому что статически созданные метаданные покрытия на хосте (coverage.em) не соответствуют данным покрытия, собранным во время выполнения приложения на устройстве (coverage.ec). На самом деле это не только «несоответствие», но и покрытие. Это связано с сбоем в собственном коде: на Android, сбой в собственном коде также завершит работу связанного Java-процесса и фактически перезапустит виртуальную машину. Это означает, что EMMA также убит, и у него нет возможности снова очистить файл coverage.ec на диске, поэтому он отсутствует.

Я задавался вопросом, будет ли это имеет смысл сделать EMMA промывать coverage.ec файл чаще до аварии, но потом снова сомнительно, насколько ценным неполный охват информация будет, как

  1. этот файл формат, вероятно, просто не построен таким образом, чтобы иметь смысл анализироваться инкрементно,
  2. частичное покрытие.ec все равно не соответствовало бы полному охвату.
  3. охват, созданный с помощью частичного покрытия.ec, сообщал бы о неправильном покрытии в отношении всех ваших тестов в пакете.

Итак, длинный рассказ короткий, лучший способ решить это - исправить свой собственный код, чтобы не сбой.

0

Я тоже встречался с этой проблемой при использовании EMMA для Android. Это потому, что cover.ec, который вы вытаскиваете из sdcard, не согласуется с cover.em. Попробуйте перестроить инструментальную версию проекта. Попробуйте следующие шаги:

  1. муравей чистый релиз
  2. муравей инструмент
  3. муравей installi
  4. ADB тянуть /mnt/sdcard/coverage.ec
  5. использовать coverage.em (вновь генерируется при папка bin проекта через шаг 2) и coverage.ec для формирования отчета по охвату

Вы можете обратиться к EMMA for Android для получения более подробной информации.