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.

Dowiedz się więcej

RenderScript – równoległe operacje na bitmapach bez użycia NDK

Musisz wykonać operacje na grafikach, a Java jest do tego zbyt wolna? Chcesz uniknąć zabawy z kompilacją kodu z użyciem NDK? Jest na to rozwiazanie! RenderScript pomoże Ci w tym zadaniu. Dzięki jego użyciu możesz zrównoleglić operacje, wykonując je zarówno na CPU, jak i GPU. Wszystko to jest dostępne w bardzo przystępnej formie, nie musisz nawet zastanawiać się, jak rozdzielić pracę.
Przeczytaj

5 powodów, dla których warto budować UI w ConstraintLayoucie

ConstraintLayout to popularne rozwiązanie, z którego twórcy aplikacji na Androida korzystają na co dzień. I nie bez powodu! Jeśli dopiero zaczynasz przygodę z programowaniem, poznaj najważniejsze zalety tego layoutu. Dzięki temu szybciej zrozumiesz jego działanie, a budowa aplikacji stanie się łatwiejsza.
Przeczytaj

Jak wykorzystać feature flags, żeby zyskać większą kontrolę nad aplikacją?

Chyba każdy, kto zajmuje się budową oprogramowania może opowiedzieć kilka historii o niedziałających funkcjach. Starannie tworzymy aplikacje z niewielkich elementów, stosujemy zaawansowane wzorce architektury, ale i tak czasem coś odmawia posłuszeństwa. Skutkuje to błędami, a nawet awarią systemu. Wtedy sytuację może uratować feature toggling. Sprawdź, jak wdrożyć feature flags i zwiększ stabilność swojej aplikacji.
Przeczytaj

Wycena projektu

Sprawdź, jak wykorzystujemy naszą wiedzę w praktyce i stwórz z nami swój projekt.

Dlaczego warto rozwijać z nami projekty?

Logo Mobile Trends Awards

Mobile Trends Awards 2017

Nominacja w kategorii
M-COMMERCE

17

opinii klientów

Clutch logo
Logo Legalni bukmacherzy

Nagroda Legalnych Bukmacherów 2019

Najlepsza aplikacja mobilna

60+

zrealizowanych projektów