Google Espresso или Robotium

Мне нужно использовать инструмент автоматического тестирования пользовательского интерфейса, и я путаюсь между использованием Robotium и Google Espresso.

Каковы основные различия между ними? Существуют ли функции, которые существуют в одном, а не другом?

Ответ 1

Полное раскрытие: Я являюсь одним из авторов эспрессо.

Оба Espresso и Robotium являются инструментальными системами, что означает, что они используют Android Instrumentation для проверки и взаимодействия с тестируемыми действиями.

В Google мы начали с Robotium, потому что это было более удобно, чем инвентарь (шляпы от разработчиков Robotium для его создания). Тем не менее, это не удовлетворило нашу потребность в структуре, которая сделала для разработчиков надежным тестирование легким.

Основные достижения в Espresso над Robotium:

  • Синхронизация

    . По умолчанию логика тестирования приборов работает на другой (измерительной) нити, чем операции с пользовательским интерфейсом (обработаны в потоке пользовательского интерфейса). Без синхронизации тестовых операций с обновлениями пользовательского интерфейса тесты будут подвержены взлому, т.е. Случайным образом из-за проблем с синхронизацией. Большинство авторов тестов игнорируют этот факт, некоторые добавляют механизмы спящих/повторных попыток и даже меньше внедряют более сложный код безопасности потока. Ни один из них не идеален. Espresso заботится о безопасности потоков, плавно синхронизируя тестовые действия и утверждения с пользовательским интерфейсом тестируемого приложения. Robotium пытается решить эту проблему с помощью механизмов сна/повтора, которые не только ненадежны, но и заставляют тесты работать медленнее, чем необходимо.

  • API

    . У Espresso есть небольшой, четко определенный и предсказуемый API, который открыт для настройки. Вы сообщаете структуре, как найти элемент пользовательского интерфейса, используя стандартные сопоставления hamcrest, а затем инструктируйте его либо выполнить действие, либо проверить утверждение на целевом элементе. Вы можете сравнить это с API Robotium, где ожидается, что автор теста будет выбирать из 30 + кликов. Кроме того, Robotium предоставляет опасные методы, такие как getCurrentActivity (что означает текущее значение в любом случае?) И getView, которые позволяют вам работать с объектами вне основного потока (см. Выше).

  • Очистить информацию об ошибке. Espresso стремится обеспечить богатую отладочную информацию, когда происходит сбой. Кроме того, вы можете настроить способ, с помощью которого Espresso обрабатывает ваш собственный обработчик ошибок. Я не пробовал это некоторое время, но предыдущие версии Robotium страдали от непоследовательной обработки отказа (например, метод clickOnView проглотил SecurityExceptions).

Вопреки предыдущему ответу, Espresso поддерживается во всех версиях API со значительным количеством пользователей (см. http://developer.android.com/about/dashboards/index.html). Он работает с некоторыми из более старых версий, но тестирование на них будет пустой тратой ресурсов. Говоря о тестировании... Espresso тестируется при каждом изменении комплексным набором тестов (с охватом более 95%), а также большинством приложений для Android, разработанными Google.

Ответ 2

Espresso намного быстрее, чем Robotium, но работает только с некоторыми версиями SDK.

Итак, если вам нужен тест, который работает на всех устройствах, идите на Roboitum. Если нет, пойдите для эспрессо, и не забывайте, что вы будете бета-тестером еще какое-то время.