2015-02-09 5 views
5

Ich habe password.setError(getResources().getString(R.string.incorrect_data)); Wenn ich ungültiges Passwort gesetzt Show Textview mit Text, ich es von Espresso testen müssen, schreibe ich:Wie kann man mit Espresso testen android.widget.TextView setError? „! Ungültige Daten“ -

onView(withText(R.string.incorrect_data)).check(matches(isDisplayed())); 

Aber es ist falsch, ich habe:

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with string from resource id: <2131493034>[incorrect_data] value: Invalid data! 
If the target view is not part of the view hierarchy, you may need to use Espresso.onData to load it from one of the following AdapterViews:android.widget.ListView{307b4f3a IFED.VC. ......ID -480,0-0,1022 #7f0a004c app:id/left_drawer} 

Und wenn ich schreibe: onView(withText("Invalid data!")).check(matches(isDisplayed()));

ich habe:

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with text: is "Invalid data!" 
If the target view is not part of the view hierarchy, you may need to use Espresso.onData to load it from one of the following AdapterViews:android.widget.ListView{307b4f3a IFED.VC. ......ID -480,0-0,1022 #7f0a004c app:id/left_drawer} 

Ich benutze Espresso 2:

import static android.support.test.espresso.assertion.ViewAssertions.matches; 
import static android.support.test.espresso.matcher.ViewMatchers.withText; 
import static android.support.test.espresso.Espresso.onView; 

Helfen Sie mir, bitte.

Antwort

6

half mir:

onView(withId(R.id.password)).check(matches(withError(
       getActivity().getString(R.string.incorrect_data)))); 

private static Matcher<View> withError(final String expected) { 
     return new TypeSafeMatcher<View>() { 

      @Override 
      public boolean matchesSafely(View view) { 
       if (!(view instanceof EditText)) { 
        return false; 
       } 
       EditText editText = (EditText) view; 
       return editText.getError().toString().equals(expected); 
      } 

      @Override 
      public void describeTo(Description description) { 

      } 
     }; 
    } 
3

Ich habe einen benutzerdefinierten Matcher für Espresso 1.x geschrieben, der die textColor eines TextView mit einem bestimmten Wert vergleicht. Vielleicht könnten Sie diese Lösung zu EditText.getError(...) für Espresso 2.x übernehmen.

/** 
* Returns a matcher that matches {@link TextView}s based on text property value. Note: View's 
* text property is never null. If you setText(null) it will still be "". Do not use null 
* matcher. 
* 
* @param integerMatcher {@link Matcher} of {@link String} with text to match 
*/ 
public static Matcher<View> withCurrentTextColor(final Matcher<Integer> integerMatcher) { 
    checkNotNull(integerMatcher); 
    return new BoundedMatcher<View, TextView>(TextView.class) { 
    @Override 
    public void describeTo(Description description) { 
     description.appendText("with text color: "); 
     integerMatcher.describeTo(description); 
    } 

    @Override 
    public boolean matchesSafely(TextView textView) { 
     return integerMatcher.matches(textView.getCurrentTextColor()); 
    } 
    }; 
} 

/** 
* Returns a matcher that matches {@link TextView} based on it's text property value. Note: 
* View's Sugar for withTextColor(is("string")). 
*/ 
public static Matcher<View> withCurrentTextColor(int color) { 
    return withCurrentTextColor(is(color)); 
} 

Und dann in Ihrem Testfall:

onView(withId(R.id.text_warning_title)).check(matches(withCurrentTextColor(activity.getResources().getColor(R.color.black_light)))); 
0

Espresso arbeitet in drei Schritten 1: Suche nach der Ansicht 2: Wirkung auf die Ansicht durchführen Die Aktion, die das Ergebnis auslöst, das Sie überprüfen möchten. 3: Überprüfen Sie, ob die Ansicht das tut, was sie tut. Überprüfen Sie die Aktion oder das Ergebnis mit einigen Assertions versehen

onView(withId(R.id.password_text)).perform(action); 
onView(withId(R.id.view_for_expected_outcome)).check(expected outcome) 

https://google.github.io/android-testing-support-library/docs/index.html Gehen Sie durch mehr über Espresso zu sehen.

Verwandte Themen