Cadre de test Espresso - Enregistreur de test
La rédaction d'un cas de test est un travail fastidieux. Même si espresso fournit une API très simple et flexible, l'écriture de cas de test peut être une tâche paresseuse et longue. Pour surmonter cela, le studio Android fournit une fonctionnalité permettant d'enregistrer et de générer des cas de test d'espresso. Record Espresso Test est disponible dans le menu Exécuter .
Enregistrons un cas de test simple dans notre HelloWorldApp en suivant les étapes décrites ci-dessous,
Ouvrez le studio Android suivi de l' application HelloWorldApp .
Cliquez sur Exécuter → Enregistrer le test Espresso et sélectionnez MainActivity .
La capture d'écran de l' enregistreur est la suivante,
![](https://assets.edu.lat/espresso_testing/images/recorder_screenshot.jpg)
Cliquez sur Ajouter une assertion . Cela ouvrira l'écran de l'application comme indiqué ci-dessous,
![](https://assets.edu.lat/espresso_testing/images/screen_as_shown.jpg)
Cliquez sur Hello World! . L' écran de l' enregistreur pour sélectionner la vue texte est le suivant,
![](https://assets.edu.lat/espresso_testing/images/recorder_screen.jpg)
Cliquez à nouveau sur Enregistrer l'assertion Cela enregistrera l'assertion et l'affichera comme suit,
![](https://assets.edu.lat/espresso_testing/images/assertion.jpg)
Cliquez sur OK . Il ouvrira une nouvelle fenêtre et demandera le nom du cas de test. Le nom par défaut est MainActivityTest
Modifiez le nom du scénario de test, si nécessaire.
Encore une fois, cliquez sur OK . Cela générera un fichier, MainActivityTest avec notre scénario de test enregistré. Le codage complet est le suivant,
package com.tutorialspoint.espressosamples.helloworldapp;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import androidx.test.espresso.ViewInteraction;
import androidx.test.filters.LargeTest;
import androidx.test.rule.ActivityTestRule;
import androidx.test.runner.AndroidJUnit4;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.allOf;
@LargeTest
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void mainActivityTest() {
ViewInteraction textView = onView(
allOf(withId(R.id.textView_hello), withText("Hello World!"),
childAtPosition(childAtPosition(withId(android.R.id.content),
0),0),isDisplayed()));
textView.check(matches(withText("Hello World!")));
}
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));
}
};
}
}
Enfin, exécutez le test à l'aide du menu contextuel et vérifiez si le scénario de test est exécuté.