Полное раскрытие информации: Я являюсь одним из авторов Espresso.
Оба Espresso и Robotium являются инструментальными системами, то есть используют Android Instrumentation для проверки и взаимодействия с действиями, находящимися под контролем.
В Google мы начали с Robotium, потому что это было более удобно, чем инвентарь (шляпы от разработчиков Robotium для его создания). Тем не менее, это не удовлетворило нашу потребность в структуре, которая сделала письменные надежными испытаниями простой для разработчиков.
Основные достижения в Espresso над Robotium:
синхронизации. По умолчанию логика тестового тестирования работает на другой (измерительной) нити, чем операции пользовательского интерфейса (обрабатываются в потоке пользовательского интерфейса). Без синхронизации тестовых операций с обновлениями пользовательского интерфейса тесты будут подвержены взлому, т. Е. Случайным образом из-за проблем с синхронизацией. Большинство авторов тестов игнорируют этот факт, некоторые добавляют механизмы спящих/повторных попыток и даже меньше внедряют более сложный код безопасности потока. Ни один из них не идеален. Espresso заботится о безопасности потоков, плавно синхронизируя тестовые действия и утверждения с пользовательским интерфейсом тестируемого приложения. Robotium пытается решить эту проблему с помощью механизмов сна/повтора, которые не только ненадежны, но и вызывают более медленные тесты, чем это необходимо.
API. У Espresso есть небольшой, четко определенный и предсказуемый API, который открыт для настройки. Вы сообщаете структуре, как найти элемент пользовательского интерфейса, используя стандарт hamcrest matchers, а затем поручить ему либо выполнить действие, либо проверить утверждение на целевом элементе. Вы можете сравнить это с API Robotium, где, как ожидается, автор теста будет выбирать из 30 + кликов. Кроме того, Robotium раскрывает опасные методы, такие как getCurrentActivity (что означает текущее значение в любом случае?) И getView, которые позволяют работать с объектами вне основного потока (см. Выше).
Очистить информацию об отказах. Espresso стремится обеспечить богатую отладочную информацию, когда происходит сбой. Кроме того, вы можете настроить способ, с помощью которого Espresso обрабатывает ваш собственный обработчик ошибок. Я не пробовал это через некоторое время, но предыдущие версии Robotium страдали от непоследовательной обработки отказа (например, метод clickOnView проглотил SecurityExceptions).
В отличие от предыдущего ответа, Эспрессо поддерживается на всех версиях API со значительным количеством пользователей (см: http://developer.android.com/about/dashboards/index.html). Он работает с некоторыми из более старых версий, но тестирование на них будет пустой тратой ресурсов. Говоря о тестировании ... Espresso тестируется при каждом изменении с помощью комплексного набора тестов (с охватом более 95%), а также большинства приложений для Android, разработанных Google.
Я честно ненавижу, когда люди с нисходящей нитью не комментируют. Я был бы признателен, если бы человек, который задумывался, написал некоторые комментарии, как в том, почему он/она делает это – Androidme
Я думаю, что этот вопрос очень полезен. Многие разработчики просят об этом сами. Каковы различия? Я думаю, проблема в том, как вы просите. Вы должны спросить его более подробно, а не просто спросить, что использовать. – tasomaniac
Это точный вопрос, на который я хотел ответить. Спасибо за сообщение –