Как получить покрытие кода в Android с помощью Maven (android-maven-plugin)

У меня есть проект Android Maven (позвоните ему parent_project), который содержит различные подмодули: my_library_project, app_using_my_library_project, test_project и extra_lib.

Итак, структура будет такой:

parent_project
   * my_library_project (Android Library Project)
   * app_using_my_library_project (Demo app that uses the Android Library Project)
   * test_project (Project containing the tests instrumented against app_using_my_library_project)
   * extra_lib

Я хотел бы создать тестовое покрытие для моего проекта Android с помощью Maven (а не Ant, я уже могу генерировать отчеты о покрытии кода с помощью Ant, следуя этим инструкциям: https://wiki.jenkins-ci.org/display/JENKINS/Building+an+Android+app+and+test+project).

У меня нет сильного предпочтения для используемого инструмента покрытия кода, но я бы предпочел EMMA, поскольку он кажется наиболее распространенным в мире разработки Android.

Я использую андроид-maven-plugin (http://code.google.com/p/maven-android-plugin/) в версии 3.0.0-alpha-12, и я уже пытался установить конфигурации моего родителя pom.xml следующее:

<test>
  <coverage>true</coverage>
  <createreport>true</createreport>
</test>

Но это не дает желаемого отчета о покрытии кода.

Итак:

  • Есть ли разница между конфигурацией pom для получения покрытия кода для стандартного Java-проекта и проекта Android?
  • Знаете ли вы какой-либо пример Android-проекта с использованием Maven, который имеет покрытие кода?
  • Любые подсказки о том, как это сделать?

Ответ 1

Если вы собираетесь придерживаться maven и хотите, чтобы плагин для maven выполнял работу по покрытию кода, я думаю Cobertura лучший выбор, поскольку Emma стабильная последняя сборка с 2005 года.

Хотя в "Руководство по тестированию приложений для Android" (последняя книга с июня этого года), они говорят об Эмме и демонстрируют, как использовать ее для тестирование, я думаю, люди придерживаются этого, потому что ему нужно было строить Android из источника (и если Google использует его для своей собственной разработки ОС, он должен быть лучшим, верно?).

Если вы не фанатично связаны с Maven, я настоятельно рекомендую попробовать Robotium. Robotium полностью поддерживает действия, диалоги, тосты, меню и контекстные меню. Он также поддерживает код coverage (на данный момент Ant), и некоторые люди признают его как одну из ведущих платформ тестирования для Android.

Изменить:

В соответствии с сайтом Cobertura он поддерживает покрытие кода в средах Maven 1 и Maven 2. Хотя, вы также можете найти примеры с Maven 3. Существует проблема между конфигурациями pom Maven 2 и Maven 3. Кажется, что для работы отчетов вы должны в основном переместить свои старые плагины отчетов в раздел конфигурации нового плагина maven-site. (Подробности см. В статье).

Другой вариант - попытаться использовать Sonar с Maven. Сонар имеет встроенный cobertura (также опции для встраивания EMMA), и некоторые люди заявляют, что они успешно сообщили о охвате кодом, несмотря на то, что у них были проблемы с использованием "автономный" плагин cobertura.

Ответ 2

Я мог бы генерировать информацию о кодовом покрытии с помощью плагина emma maven и отображать отчеты в сонаре для проекта приложения Android. Просто выполните конфигурацию в https://code.google.com/p/maven-android-plugin/wiki/EmmaMaven. Но для проекта библиотеки я получаю 0% покрытия. Он не генерирует файлы метаданных. Однако, как только я сменил проект библиотеки на пакет как apk, он работает как шарм. Он запускает тесты в эмуляторе (настроенном в jenkins) и показывает отчеты о покрытии. Если вы смотрите специально на проект библиотеки, это не поможет. Я отправлю сообщение, если найду какое-то решение, которое занимается библиотечными проектами.