В этой главе мы узнаем об условиях фреймворка эспрессо, о том, как написать простой тестовый эспрессо, и о полном рабочем процессе или архитектуре фреймворка эспрессо.
обзор
Espresso предоставляет большое количество классов для тестирования пользовательского интерфейса и взаимодействия с пользователем приложения для Android. Они могут быть сгруппированы в пять категорий, как указано ниже —
Юнит бегун
Платформа тестирования Android предоставляет средство запуска AndroidJUnitRunner для запуска тестовых случаев эспрессо, написанных в тестовых примерах стиля JUnit3 и JUnit4. Он специфичен для приложений Android и прозрачно обрабатывает загрузку тестовых наборов для эспрессо и тестируемого приложения как в реальном устройстве, так и в эмуляторе, выполняет тестовые наборы и сообщает о результатах тестовых примеров. Чтобы использовать AndroidJUnitRunner в тестовом примере, нам нужно аннотировать тестовый класс с помощью аннотации @RunWith, а затем передать аргумент AndroidJUnitRunner, как указано ниже:
@RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest { }
Юнит правила
Платформа тестирования Android предоставляет правило ActivityTestRule для запуска активности Android перед выполнением тестовых случаев. Он запускает действие перед каждым методом, аннотированным @ Test` и @Before. Он прервет действие после метода, помеченного @After. Пример кода выглядит следующим образом:
@Rule public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
Здесь MainActivity — это действие, которое должно быть запущено перед запуском тестового примера и уничтожено после запуска конкретного тестового примера.
ViewMatchers
Espresso предоставляет большое количество классов сопоставления представлений (в пакете androidx.test.espresso.matcher.ViewMatchers ) для сопоставления и поиска элементов / представлений пользовательского интерфейса в иерархии представлений экрана активности Android. Метод Espresso onView принимает единственный аргумент типа Matcher (View matchers), находит соответствующее представление пользовательского интерфейса и возвращает соответствующий объект ViewInteraction . Объект ViewInteraction, возвращаемый методом onView, может в дальнейшем использоваться для вызова таких действий, как щелчок по сопоставленному представлению, или может использоваться для утверждения сопоставленного представления. Пример кода для поиска представления с текстом «Hello World!» Выглядит следующим образом:
ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));
Здесь withText — это средство сопоставления, которое можно использовать для сопоставления представления пользовательского интерфейса, имеющего текст «Hello World!»
ViewActions
Espresso предоставляет большое количество классов действий представления (в androidx.test.espresso.action.ViewActions), чтобы вызывать различные действия в выбранном / согласованном представлении. Как только onView сопоставляет и возвращает объект ViewInteraction , любое действие может быть вызвано путем вызова метода « execute» объекта ViewInteraction и передачи его с соответствующими действиями представления. Пример кода для выбора подходящего вида выглядит следующим образом:
ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!")); viewInteraction.perform(click());
Здесь будет выполнено действие щелчка соответствующего вида.
ViewAssertions
Аналогично представлениям соответствия и действиям представления, Espresso предоставляет большое количество утверждений представления (в пакете androidx.test.espresso.assertion.ViewAssertions ), чтобы утверждать, что согласованное представление — то, что мы ожидали. Как только onView совпадает и возвращает объект ViewInteraction , любое утверждение может быть проверено с использованием метода проверки ViewInteraction , передав его с правильным утверждением представления. Пример кода, чтобы утверждать, что согласованное представление выглядит следующим образом:
ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!")); viewInteraction.check(matches(withId(R.id.text_view)));
Здесь совпадения принимают сопоставление вида и возвращают утверждение представления, что можно проверить методом проверки ViewInteraction .
Рабочий процесс Espresso Testing Framework
Давайте разберемся, как работает фреймворк для эспрессо и как он предоставляет возможности для любого пользовательского взаимодействия простым и гибким способом. Рабочий процесс теста эспрессо, как описано ниже,
-
Как мы узнали ранее, Android JUnit Runner, AndroidJUnit4 будет запускать тестовые случаи Android. Тестовые наборы для эспрессо должны быть помечены @RunWith (AndroidJUnut.class) . Во-первых, AndroidJUnit4 подготовит среду для запуска тестовых случаев. Он запускает подключенное устройство Android или эмулятор, устанавливает приложение и проверяет, находится ли тестируемое приложение в состоянии готовности. Он запустит тестовые случаи и сообщит о результатах.
-
Эспрессо требуется по крайней мере одно правило JUnit типа ActivityTestRule, чтобы указать действие. Android JUnit runner запустит действие, которое будет запущено с помощью ActivityTestRule .
-
В каждом тестовом примере требуется как минимум один вызов метода onView или onDate (используется для поиска представлений на основе данных, таких как AdapterView ) для сопоставления и поиска нужного представления. onView или onData возвращает объект ViewInteraction .
-
Как только объект ViewInteraction возвращается, мы можем либо вызвать действие выбранного представления, либо проверить представление на ожидаемое представление, используя утверждение.
-
Действие можно вызвать с помощью метода execute объекта ViewInteraction , передав любое из доступных действий просмотра.
-
Утверждение может быть вызвано с помощью метода check объекта ViewInteraction , передав любое из доступных утверждений представления.
Как мы узнали ранее, Android JUnit Runner, AndroidJUnit4 будет запускать тестовые случаи Android. Тестовые наборы для эспрессо должны быть помечены @RunWith (AndroidJUnut.class) . Во-первых, AndroidJUnit4 подготовит среду для запуска тестовых случаев. Он запускает подключенное устройство Android или эмулятор, устанавливает приложение и проверяет, находится ли тестируемое приложение в состоянии готовности. Он запустит тестовые случаи и сообщит о результатах.
Эспрессо требуется по крайней мере одно правило JUnit типа ActivityTestRule, чтобы указать действие. Android JUnit runner запустит действие, которое будет запущено с помощью ActivityTestRule .
В каждом тестовом примере требуется как минимум один вызов метода onView или onDate (используется для поиска представлений на основе данных, таких как AdapterView ) для сопоставления и поиска нужного представления. onView или onData возвращает объект ViewInteraction .
Как только объект ViewInteraction возвращается, мы можем либо вызвать действие выбранного представления, либо проверить представление на ожидаемое представление, используя утверждение.
Действие можно вызвать с помощью метода execute объекта ViewInteraction , передав любое из доступных действий просмотра.
Утверждение может быть вызвано с помощью метода check объекта ViewInteraction , передав любое из доступных утверждений представления.
Диаграмма представления рабочего процесса выглядит следующим образом:
Пример — просмотр утверждения
Давайте напишем простой тестовый пример, чтобы найти текстовое представление с текстом «Hello World!» В нашем приложении «HelloWorldApp», а затем подтвердить его с помощью утверждения представления. Полный код выглядит следующим образом:
package com.tutorialspoint.espressosamples.helloworldapp; import android.content.Context; import androidx.test.InstrumentationRegistry; import androidx.test.rule.ActivityTestRule; import androidx.test.runner.AndroidJUnit4; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.matcher.ViewMatchers.withText;; import static androidx.test.espresso.assertion.ViewAssertions.matches; import static org.junit.Assert.*; /** * Instrumented test, which will execute on an Android device. * * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> */ @RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest { @Rule public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class); @Test public void view_isCorrect() { onView(withText("Hello World!")).check(matches(isDisplayed())); } @Test public void useAppContext() { // Context of the app under test. Context appContext = InstrumentationRegistry.getTargetContext(); assertEquals("com.tutorialspoint.espressosamples.helloworldapp", appContext.getPackageName()); } }
Здесь мы использовали сопоставители с текстовым представлением, чтобы найти текстовое представление, содержащее текст «Hello World!» И соответствующее утверждение представления, чтобы утверждать, что текстовое представление отображается правильно. После запуска тестового примера в Android Studio он запустит тестовый отчет и сообщит об успешном завершении, как показано ниже.