Покрытие кода для Android (calabash-android BDD)

Я тестирую свое андроид-приложение с помощью calabash-android, который предоставляет собственный "тестовый проект" со скриптом, который переименовывает свой пакет, чтобы отразить тестируемое приложение, а затем использует подкласс InstrumentationTestRunner:

adb shell am instrument -w -e class sh.calaba.instrumentationbackend.InstrumentationBackend #{ENV['TEST_PACKAGE_NAME']}/sh.calaba.instrumentationbackend.CalabashInstrumentationTestRunner

Я приму любой ответ, который позволит мне сгенерировать отчет о покрытии кода, похожий на Эмму или Кобертуру для приложения для Android, с данными, собранными во время тестирования в calabash-android.

В попытке заставить Эмму работать, у меня есть...

  • Попытка следовать этим инструкциям, чтобы заставить Maven построить мой проект (потому что прошло слишком много времени с тех пор, как я использовал ant). coverage.em файл генерируется в target/emma
  • Изменен скрипт calabash-android, добавив-e coverage true"
  • Когда я запускаю calabash-android, я в конечном итоге вижу "Сгенерированные данные покрытия в /data/data/my.project/files/coverage.ec"
  • adb -e pull /data/data/my.project/files/coverage.ec coverage.ec

... так что теперь я должен быть в состоянии запустить:

  • java -cp $ANDROID_HOME/tools/lib/emma.jar emma report -r html -in target/emma/coverage.em,coverage.ec

но я получаю ошибку:

EMMA: processing input files...
java.io.UTFDataFormatException: malformed input around byte 107

... Итак, я предполагаю, что что-то не так с плагином Android Maven, и я пытаюсь выяснить, как генерировать coverage.em файл. Я побежалandroid update project -p ." а также "ant emma" а также "ant emma debug", но я нигде не могу найти cover.em...

... Сгенерированный файл build.xml, по-видимому, подразумевает, что генерация файла cover.em генерируется только при запуске "теста ant emma", но я не думаю, что это сработает, поскольку тестовое приложение контролируется кальян-андроид.

В попытке заставить Кобертуру работать, у меня есть...

  • Погуглил разные формы "андерла cobertura", но не похоже, что кому-то повезло.
  • Попытка настроить профиль cobertura в моем файле pom Maven для инструментов классов, но (в Maven 3) я получаю
    • целая куча предупреждений о том, что log4j и ant имеют атрибуты "InnerClasses" и что я должен перекомпилировать их из исходного кода
    • ошибка, которая com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.3.0:dex "ANDROID-040-001: не удалось выполнить: Command = /bin/sh -c -cd /path/ в / myproject && java -jar $ ANDOID_HOME / platform-tools / lib / dx.jar --dex... "

EXCEPTION FROM SIMULATION:
local variable type mismatch: attempt to set or access a value of type 
java.lang.Class using a local variable of type java.lang.reflect.Type[].  
This is symptomatic of .class transformation tools that ignore local variable information.

... возможно, поэтому никто не смог заставить cobertura работать на Android?

1 ответ

Решение

Проблема в том, что maven-android-plugin использует версию 2.1.5320 от emma, тогда как инструменты Android используют версию 2.0.5312. Как обсуждалось здесь, эти две версии несовместимы.

Исправление состоит в том, чтобы использовать только одну версию для двух инструментов. Я смог заставить его работать, клонируя maven-android-plugin repo, установив версию зависимости emma обратно на 2.0.5312 и установив ее в мой локальный репозиторий. Убедитесь, что зависимость emma в вашем тестовом проекте также верна, и тогда вы сможете создать покрытие.

Альтернатива - убедиться, что все инструменты используют новейшую версию. Я не тестировал его, но он может сработать, если вы создадите отчет из maven, если версия будет такой же. Вы также можете загрузить новейшую версию emma и сгенерировать отчет, используя jar из этого пакета.

Другие вопросы по тегам