Тестирование Android-приложений с Espresso.

В данной статье мы рассмотрим процедуру тестирования приложения под ОС Android. И вместе с тем разберем фреймворк Espresso, поставляемый вместе с AndroidSupportRepository, позволяющий вам довольно просто писать тестовые скрипты. Мощь Espresso — в ее простоте.

В Espresso сильный упор сделан именно на UI. При этом тесты легко читаемы, так как состоят из довольно простых команд, вроде возьми эту кнопку, нажми ее и посмотри, как изменилось содержимое вон той текстовой метки.

Перед началом работы зайдите в SDK Manager и проверьте, установлен ли у вас AndroidSupportRepository. Если нет, то загрузите его.

android_support_repository

Теперь пропишите все зависимости:

В defaultConfig добавьте следующую строку для запуска тестов:

Виды, действия и проверки.

Работа с этими составляющими вам и предстоит при написании тестов с Espresso. Фреймворк включает в себя три основные части. Их довольно легко запомнить:

  • ViewMatchers — поиска какого-то нужно View на экране.
  • ViewActions — выполнение действий с этим View, например, щелчок на кнопке или установка текста.
  • ViewAssertions — проверка состояния View, например, того факта, что указанная текстовая метка содержит нужный текст.

Примеры.

Допустим, что наше приложение состоит всего из двух активностей. На первой активности мы вводим свое имя и планету, с которой прилетели. А на второй нас торжественно встречают:)

espresso_test espresso_test_2

Теперь как написать тест? Во-первых, тест должен располагаться в папке androidTest и наследоваться от ActivityInstrumentationTestCase2.

android_test

Во-вторых, тест должен иметь конструктор, который в качестве аргумента конструктора суперкласса принимает класс тестируемой активности:

Метод setUp() вызывается перед стартом любых тестовых методов и предназначен для выполнения подготовительных действий. Теперь взглянем на текст самого теста:

В тесте мы просто указываем конкретные элементы по их id на экране. Если элемент на экране отсутствует, то тест завалится. perform() — это уже выполняемое действие, в скобках указано само действие, например, typeText() — напечатать текст, а click() означает нажатие клавиши.

Далее нам нужно провести проверку и сравнить полученный результат во втором окне с ожидаемым нами. На первом экране мы ввели имя и наименование планеты. Было бы неплохо, чтобы на другом окне нас действительно поприветствовали! Сначала мы находим текстовую метку, на которой должно отобразиться приветствие, а затем вызываем метод check() для проверки, совпадает ли ее содержимое с ожидаемым результатом.

Обратите внимание, что в тесте мы никак не указываем, что перешли на другую активность, а продолжаем просто оперировать идентификаторами элементов! Теперь кликните правой кнопкой мыши на файле с тестом и нажмите Run.

espresso_test_passed

Тест успешно пройден! В случае неудачи тест завалится и выведет вам сообщение об ошибке.

Списки и метод onData().

Для взаимодействия с компонентами, представленными в виде списка и использующими адаптер, например, ListView или Spinner, придется освоить специальный метод onData().

Допустим, что теперь в нашем приложении планету мы не вводим в текстовое поле, а выбираем из выпадающего списка(Spinner).

espresso_test_spinner

Теперь взглянем на код теста, в нем изменилось не так уж и много.

3 комментария

  1. Владимир Ответить

    Спасибо за статью. А подскажите пожалуйста как запускать последовательно несколько тестов?

    • breakoffbrain АвторОтветить

      не за что)рад, если статья оказалась полезной. Чтобы запустить несколько тестов сразу, можно щелкнуть на папке с тестами и нажать Select ‘Tests’. Потом запустить тесты на выполнение

  2. Victor Ответить

    Privet. Izvinite chto ne russkimi bukvami. Mne nujna pomosh s espresso dlya android. U vas est vremya ili jelanie pomoch mne s etim? Mojet znaete cheloveka ili kursi? Po oplate pogovorim esli est vozmojnost pozanimatsa so mnoi.

    Spasibo.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *