Framework testowania espresso - architektura

W tym rozdziale zapoznajmy się z warunkami ram testowania espresso, jak napisać prosty przypadek testowy espresso oraz kompletny przepływ pracy lub architekturę struktury testowania espresso.

Przegląd

Espresso zapewnia dużą liczbę klas do testowania interfejsu użytkownika i interakcji aplikacji na Androida. Można je podzielić na pięć kategorii, jak określono poniżej -

JUnit runner

Platforma testowania systemu Android zapewnia moduł uruchamiający, AndroidJUnitRunner, który umożliwia uruchamianie przypadków testowych espresso napisanych w przypadkach testowych w stylu JUnit3 i JUnit4. Jest specyficzny dla aplikacji na Androida i przejrzyście obsługuje ładowanie przypadków testowych espresso i testowanej aplikacji zarówno w rzeczywistym urządzeniu, jak i emulatorze, uruchamia przypadki testowe i raportuje wyniki przypadków testowych. Aby użyć AndroidJUnitRunner w przypadku testowym, musimy dodać adnotację do klasy testowej za pomocą adnotacji @RunWith, a następnie przekazać argument AndroidJUnitRunner, jak określono poniżej -

@RunWith(AndroidJUnit4.class)
   public class ExampleInstrumentedTest {
}

Zasady JUnit

Struktura testowa systemu Android zapewnia regułę, ActivityTestRule, która uruchamia działanie systemu Android przed wykonaniem przypadków testowych. Uruchamia działanie przed każdą metodą z adnotacją @ Test` i @Before. Zakończy działanie po metodzie z adnotacją @After. Przykładowy kod jest następujący:

@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);

Tutaj MainActivity jest działaniem, które ma zostać uruchomione przed uruchomieniem przypadku testowego i zniszczone po uruchomieniu konkretnego przypadku testowego.

ViewMatchers

Espresso zapewnia dużą liczbę klas dopasowujących widok (w pakiecie androidx.test.espresso.matcher.ViewMatchers ), aby dopasować i znaleźć elementy / widoki interfejsu użytkownika w hierarchii widoków ekranu aktywności Androida. Metoda onView Espresso przyjmuje pojedynczy argument typu Matcher (View matchers), znajduje odpowiedni widok interfejsu użytkownika i zwraca odpowiedni obiekt ViewInteraction . Obiekt ViewInteraction zwrócony przez metodę onView może być dalej używany do wywoływania akcji, takich jak kliknięcie dopasowanego widoku lub może służyć do potwierdzania dopasowanego widoku. Przykładowy kod, aby znaleźć widok z tekstem „Hello World!” następująco,

ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));

Tutaj withText jest dopasowującym , którego można użyć do dopasowania widoku interfejsu użytkownika z tekstem „Hello World!”

ViewActions

Espresso zapewnia dużą liczbę klas akcji widoku (w androidx.test.espresso.action.ViewActions) w celu wywołania różnych akcji w wybranym / dopasowanym widoku. Gdy onView dopasuje i zwróci obiekt ViewInteraction , dowolną akcję można wywołać poprzez wywołanie metody „perform” obiektu ViewInteraction i przekazanie jej z odpowiednimi akcjami widoku. Przykładowy kod umożliwiający kliknięcie dopasowanego widoku jest następujący:

ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));
viewInteraction.perform(click());

Tutaj zostanie wywołane kliknięcie w dopasowanym widoku.

ViewAssertions

Podobnie jak w przypadku sprawdzania dopasowań i działań związanych z wyświetlaniem, Espresso zapewnia dużą liczbę potwierdzeń widoku (w pakiecie androidx.test.espresso.assertion.ViewAssertions ), aby potwierdzić, że dopasowany widok jest tym, czego oczekiwaliśmy. Gdy onView dopasuje i zwróci obiekt ViewInteraction , każde potwierdzenie można sprawdzić za pomocą metody sprawdzania ViewInteraction , przekazując je z odpowiednim potwierdzeniem widoku. Przykładowy kod potwierdzający, że dopasowany widok jest następujący:

ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));
viewInteraction.check(matches(withId(R.id.text_view)));

Tutaj dopasowania akceptują dopasowanie widoku i zwracają potwierdzenie widoku, które można sprawdzić metodą sprawdzania ViewInteraction .

Przepływ pracy w ramach testowania espresso

Pozwól nam zrozumieć, jak działa platforma testowania espresso i jak zapewnia opcje przeprowadzania dowolnego rodzaju interakcji z użytkownikiem w prosty i elastyczny sposób. Przebieg testu dla espresso jest taki, jak opisano poniżej,

  • Jak dowiedzieliśmy się wcześniej, Android JUnit runner, AndroidJUnit4 będzie uruchamiał przypadki testowe Androida. Przypadki testowe espresso muszą być oznaczone @RunWith (AndroidJUnut.class) . Najpierw AndroidJUnit4 przygotuje środowisko do uruchomienia przypadków testowych. Uruchamia podłączone urządzenie z Androidem lub emulator, instaluje aplikację i upewnia się, że testowana aplikacja jest w stanie gotowości. Uruchomi przypadki testowe i poda wyniki.

  • Espresso potrzebuje co najmniej jednej reguły JUnit typu ActivityTestRule, aby określić działanie. Android JUnit runner rozpocznie działanie, które ma zostać uruchomione przy użyciu ActivityTestRule .

  • Każdy przypadek testowy wymaga co najmniej jednego wywołania metody onView lub onDate (używanego do znajdowania widoków opartych na danych, takich jak AdapterView ), aby dopasować i znaleźć żądany widok. onView lub onData zwraca obiekt ViewInteraction .

  • Po zwróceniu obiektu ViewInteraction możemy albo wywołać akcję wybranego widoku, albo sprawdzić widok pod kątem naszego oczekiwanego widoku za pomocą asercji.

  • Akcję można wywołać za pomocą metody perform obiektu ViewInteraction , przekazując dowolną z dostępnych akcji widoku.

  • Asercję można wywołać za pomocą metody sprawdzania obiektu ViewInteraction , przekazując dowolną z dostępnych asercji widoku.

Diagram przepływu pracy jest następujący:

Przykład - zobacz asercję

Napiszmy prosty przypadek testowy, aby znaleźć widok tekstu z „Hello World!” tekst w naszej aplikacji „HelloWorldApp”, a następnie potwierdź go za pomocą potwierdzenia widoku. Pełny kod jest następujący,

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());
   }
}

Tutaj użyliśmy z dopasowywaniem widoku tekstu, aby znaleźć widok tekstu z „Hello World!” tekst i dopasowuje asercję widoku, aby zapewnić, że widok tekstu jest poprawnie wyświetlany. Po wywołaniu przypadku testowego w Android Studio uruchomi on przypadek testowy i zgłosi komunikat o powodzeniu, jak poniżej.

view_isPoprawny przypadek testowy