Espresso Test Recorder – jak wykorzystać go w projekcie?

Espresso Test Recorder – jak wykorzystać go w projekcie?

Wraz z udostępnieniem Android Studio w wersji 2.2, Google oddało w ręce deweloperów wiele nowości. Jedną z nich jest Espresso Test Recorder. Co to jest i jak wpływa na sposób przeprowadzania testów?

Espresso Test Recorder – szybki sposób na testowanie

Espresso jest frameworkiem umożliwiającym pisanie testów UI naszych aplikacji. Jest on częścią Android Support Testing Library. Dzięki niemu tworzenie testów jest znacznie łatwiejsze oraz szybsze niż wtedy, gdy piszemy je samodzielnie.

Nasze zadanie polega na wykonaniu akcji, takich jak przy normalnym użytkowaniu aplikacji. Następnie dodajemy asercje, które ocenią, czy działanie aplikacji jest prawidłowe. Po zakończeniu tzw. nagrywania zostaje wygenerowany kod z testem, który odpala się tak samo, jak test pisany ręcznie.

Instalacja krok po kroku

Aby rozpocząć pracę z Test Recorderem, do naszego pliku app/build.gradle musimy dodać następujące zależności:

androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
androidTestCompile 'com.android.support.test:runner:0.5'

W tym samym pliku, w sekcji android.defaulConfig należy dodać:

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

Nagrywanie testów

Po takim przygotowaniu możemy rozpocząć nagrywanie testu. Z górnego menu wybieramy Run -> Record Espresso Test.

Fragment menu w Android Studio

Następnie wybieramy urządzenie, na którym ma zostać uruchomiona aplikacja. Może to być zarówno emulator, jak i fizyczne urządzenie.

W tym miejscu warto zaznaczyć, że aby nagrywanie testów działało prawidłowo, najlepiej w opcjach deweloperskich wyłączyć animacje.

Naszym oczom powinno ukazać się okno zawierające wszystkie interakcje oraz asercje, jakie wykonaliśmy/dodaliśmy. Na samym początku będzie ono oczywiście puste.

Widok z pustą listą wykonanych interakcji i asercji w Espresso Test Recorder

Po każdej wykonanej interakcji lista będzie uaktualniana.

Widok asercji

Dodawanie asercji

W dowolnym momencie możemy zaznaczyć jakikolwiek widok, a następnie klikając w przycisk „Add Assertion” dodać asercję, oceniającą czy znajduje się on we właściwym stanie, czy też nie. Wybór asercji niestety nie jest zbyt szeroki i ogranicza się do, „exists” lub „does not exist” dla wszystkich widoków oraz dodatkowo „text is” dla TextView i jego podklas.

Dodawanie asercji w Espresso Test Recorder

Po wykonaniu wszystkich akcji i dodaniu asercji, możemy kliknąć w przycisk „Complete Recording”. Po zakończeniu nagrywania zostanie wygenerowany plik z kodem dla naszego testu.

@RunWith(AndroidJUnit4.class)
public class MainActivityTest3 {
    @Rule
    public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
    @Test
    public void mainActivityTest3() {
        ViewInteraction appCompatButton = onView(
                allOf(withId(R.id.button_1), withText("Button 1"),
                        withParent(allOf(withId(R.id.activity_main),
                                withParent(withId(android.R.id.content)))),
                        isDisplayed()));
        appCompatButton.perform(click());
        ViewInteraction textView = onView(
                allOf(withId(R.id.text_tv), withText("Button 1"),
                        childAtPosition(
                                allOf(withId(R.id.activity_main),
                                        childAtPosition(
                                                withId(android.R.id.content),
                                                0)),
                                0),
                        isDisplayed()));
        textView.check(matches(withText("Button 1")));
    }

    private static Matcher<View> childAtPosition(
            final Matcher<View> parentMatcher, final int position) {

        return new TypeSafeMatcher<View>() {
            @Override
            public void describeTo(Description description) {
                description.appendText("Child at position " + position + " in parent ");
                parentMatcher.describeTo(description);
            }
            @Override
            public boolean matchesSafely(View view) {
                ViewParent parent = view.getParent();
                return parent instanceof ViewGroup && parentMatcher.matches(parent)
                        && view.equals(((ViewGroup) parent).getChildAt(position));
            }
        };
    }

}


Espresso Test Recorder jest na pewno ciekawym narzędziem z potencjałem. Niestety, głównie przez ograniczenia związane z małą ilością możliwych asercji, nie pozwala on jeszcze na tworzenie bardziej skomplikowanych testów. Zachęcamy jednak do sprawdzenia jego działania i śledzenia jego rozwoju. W przyszłości może on nawet całkowicie zastąpić tradycyjny sposób tworzenia testów UI.

Grzesiek

Grzesiek Lipski

Profesjonalnym rozwojem aplikacji na Androida zajmuje się od 9 lat. Lubi nowoczesne rozwiązania i zawsze zwraca uwagę na dobrą jakość kodu. Grzesiek chętnie testuje nowe możliwości, dlatego tworzy aplikacje również we Flutterze, a po godzinach próbuje swoich sił przy tworzeniu gier w Unity3D. Kiedy akurat nie programuje, gra w squasha albo robi fotografie dronem.

Wycena projektu

Opowiedz nam o swoim projekcie i napisz, jak możemy Ci pomóc.

Dlaczego warto rozwijać z nami projekty?

Logo Mobile Trends Awards

Mobile Trends Awards 2021

Wygrana w kategorii
ŻYCIE CODZIENNE

Nagroda Legalnych Bukmacherów

Nagroda Legalnych Bukmacherów 2019

Najlepsza aplikacja mobilna

Mobile Trends Awards logo

Mobile Trends Awards 2020

Nominacja w kategorii
SPORT I REKREACJA

20

opinii klientów

Clutch logo