Irgendwie scheint es, dass das Testen in der mobilen Entwicklung immer noch wie ein nachträglicher Gedanke behandelt wird. Mit der Einführung des
[caption id="attachment_16486" align="aligncenter" width="480"]
Android TextView mit Fehlermeldung[/caption]
Um dies zu testen, gibt mein Espresso-Test einen ungültigen Wert in eines der Felder ein, drückt auf "Senden" und überprüft, ob das Feld tatsächlich eine Fehlermeldung anzeigt. [java] @Test public void check() { Espresso .onView(ViewMatchers.withId((R.id.email))) .perform(ViewActions.typeText("foo")); Espresso .onView(ViewMatchers.withId(R.id.submit)) .perform(ViewActions.click()); Espresso .onView(ViewMatchers.withId((R.id.email))) .check(ViewAssertions.matches( ErrorTextMatchers.withErrorText(Matchers.containsString("email address is invalid")))); } [/java] Die eigentliche Magie geschieht in der Hilfsklasse ErrorTextMatchers: [java] public final class ErrorTextMatchers { /**
- Gibt einen Matcher zurück, der {@link TextView}s auf der Grundlage des Werts der Texteigenschaft abgleicht.
- @param stringMatcher {@link Matcher} von {@link String} mit dem zu übereinstimmenden Text
*/
@NonNull
public static Matcher<Siehe> withErrorText(final Matcher<Zeichenfolge> stringMatcher) {
return new BoundedMatcher<Ansicht, TextView>(TextView.class) {
@Override
public void describeTo(final Beschreibung description) {
description.appendText("mit Fehlertext: ");
stringMatcher.describeTo(description);
}
@Override
public boolean matchesSafely(final TextView textView) {
return stringMatcher.matches(textView.getError().toString());
}
};
}
}
[/java]
Die wichtigsten Details der Implementierung sind wie folgt. Wir stellen sicher, dass der Matcher nur mit Kindern der Klasse TextView übereinstimmt, indem wir einen
BoundedMatcher auswithErrorText() zurückgeben. Dadurch ist es sehr einfach, die Abgleichslogik selbst inBoundedMatcher.matchesSafely() zu implementieren: Nehmen Sie einfach die MethodegetError() von der TextView und geben Sie sie an den nächsten Matcher weiter. Schließlich haben wir eine einfache Implementierung der describeTo() -Methode, die nur dazu dient, Debug-Ausgaben auf der Konsole zu erzeugen. Zusammenfassend lässt sich sagen, dass es ziemlich einfach ist, einen eigenen ViewMatcher zu erstellen. Wer hätte das gedacht? Vielleicht gibt es ja doch noch Hoffnung für das Testen mobiler Anwendungen... Ein Beispielprojekt mit den ErrorTextMatchern finden Sie auf GitHub: github.com/smuldr/espresso-errortext-matcher.
Verfasst von
Steven Mulder
Unsere Ideen
Weitere Blogs
Contact



