Подтвердить что ты не робот

Лучший способ запуска Robolectric тестов на Android-устройстве

У меня есть настройка тестового проекта Robolectric, но я также хотел бы запустить эти тесты на своем устройстве, чтобы проверить, что я не получаю бит от различий в реализации JVM vs Dalvik.

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

Какой лучший способ сделать это?


Что у меня есть:

Мой проект тестирования robolectric в качестве тестового примера TestPackage. Я создал проект тестирования Android с тестовым примером TestRoboOnAndroid. Он создает TestPackage и имеет тест для каждого теста в TestPackage.

Прямо сейчас, каждый раз, когда я добавляю тест в свой комплект robolectric, мне нужно вручную добавить его в свой набор устройств. Есть ли способ сделать это автоматически с отражением?

Кроме того, Robolectric использует JUnit 4 (по умолчанию), а Android использует JUnit 3. Поэтому мне нужно написать все мои тесты Robolectric с использованием стиля JUnit 3 (импортирование из junit.framework вместо org.junit).

4b9b3361

Ответ 1

Вся суть Robolectric - НЕ запускать его на устройстве, и на основе этого основывается дизайн. Если вы хотите что-то запустить на устройстве, посмотрите на тесты инструментальных средств по умолчанию из SDK или Robotium.

Вполне возможно выполнить ваши тесты Robolectric на JVM и, кроме того, создать тесты Robotium, которые полагаются на взаимодействие с конкретным устройством (например, создание скриншотов, различия в оборудовании...) и запускаются на устройствах и эмуляторах, все они объединены в одну сборку.

Самый простой способ сделать это - использовать Android Maven Plugin.

Ответ 2

Я использую многоуровневую систему, где, когда это возможно, я предпочитаю более ранние уровни:

  • Чистые модульные тесты. Я стараюсь сделать как можно больше кода полностью независимым от Android API, а затем использовать "чистые" модульные тесты, которые могут запускаться на любой JVM. Эти тесты являются самыми быстрыми, и это помогает сохранить код, который не нуждается в переносе Android.

  • Модульные тесты с поддержкой Robolectric. Где мой код имеет только небольшие зависимости от API Android, которые могут быть удовлетворены тенями Robolectric, я тестирую его с помощью Robolectric. Для Robolectric существует немного больше времени для настройки по сравнению с чистыми тестами, но оно все же быстрее, чем запуск/запуск на эмуляторе.

  • Android framework. Где Robolectric не сокращает его - либо потому, что тени не существуют, либо потому, что я сильно использую API Android (и поэтому хочу протестировать против Real Thing) - я пишу тест, который запускается на эмуляторе/устройстве с помощью по умолчанию.

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

Ответ 3

Мы используем Robolectric для модульного тестирования против JVM и Calabash-Android для тестирования системы с Dalvik. Оба могут быть интегрированы в нашу сборку Jenkins CI и между двумя инструментами, которые, как мне кажется, охватывают все базы.