Intereting Posts
Как немедленно заменить текущий тост на второй, не дожидаясь окончания текущего? Android: удаление элементов из действия ListView / ArrayAdapter ActionBar setBackgroundDrawable () обнуление фона из Thread / Handler Как отправить csv / текстовый файл с телефона Android на принтер Wi-Fi? Как я могу использовать быструю свертку на основе FFT для реализации LPF, если для быстрой свертки требуется LPF? Управление несколькими подписками для одного элемента для нескольких пользователей AsyncTask загрузка изображения RecyclerView Объединение вызовов API с RX Java Метод add (int, Fragment, String) в типе FragmentTransaction не применим для аргументов (int, Fragment, String) Попытка написать базу данных только для чтения … но я не Окно Eclipse DDMS не показывает ничего + Android Запрос Sqlite для нескольких значений в одном столбце Просмотр данных SQLite на планшете Android – SQLite Database Browser Убивать другой процесс / приложение программно Как передать строку html в webview на android

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

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

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

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

В попытке получить работу Эммы у меня есть …

  • Попытка следовать этим инструкциям, чтобы заставить Maven построить мой проект (потому что это было слишком долго, так как я использовал муравей). Файл target/emma создается в target/emma
  • Изменен скрипт calabash-android, добавив « -e coverage true »,
  • Когда я запускаю calabash-андроид, я в конце концов вижу «Сгенерированные данные покрытия в /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 , но я не могу найти ant emma debug любом месте

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

В попытке получить работу Cobertura у меня есть …

  • Googled различные формы «cobertura android», но не похоже, что кому-то повезло.
  • Попытка сконфигурировать профиль cobertura в моем файле Maven pom для управления классами, но (в 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 / To / 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?

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

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

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