Cómo probar los valores de TextInputLayout (sugerencia, error, etc.) usando Android Espresso?

Estoy intentando probar usar Espresso si mis vistas de TextInputLayout tienen indirecta específica. Había usado un código como el siguiente:

 Espresso.onView(ViewMatchers.withId(R.id.edit_text_email)) .check(ViewAssertions.matches( ViewMatchers.withHint(R.string.edit_text_email_hint))) 

Esto funciona bien para las vistas normales de EditText , no envuelto en TextInputLayout . Sin embargo, cuando se envuelve, ya no funciona.

He intentado utilizar la solución de Android Espresso – ¿Cómo comprobar la pista EditText? , Pero todavía no funciona.

También miré en: https://code.google.com/p/android/issues/detail?id=191261 que informó sobre el problema, dice que la solución es bastante fácil señalando el código actual withHint , pero puedo ' T conseguir que funcione.

¿Alguna idea para solucionar este problema?

Aquí está mi encuadernador personalizado:

 public static Matcher<View> hasTextInputLayoutHintText(final String expectedErrorText) { return new TypeSafeMatcher<View>() { @Override public boolean matchesSafely(View view) { if (!(view instanceof TextInputLayout)) { return false; } CharSequence error = ((TextInputLayout) view).getHint(); if (error == null) { return false; } String hint = error.toString(); return expectedErrorText.equals(hint); } @Override public void describeTo(Description description) { } }; } } 

Y aquí es cómo utilizar:

 @RunWith(AndroidJUnit4.class) public class MainActivityTest { @Rule public ActivityTestRule<MainActivity> mRule = new ActivityTestRule<>(MainActivity.class); @Test public void testMyApp() { onView(withId(R.id.textInputLayout)).check (matches(hasTextInputLayoutErrorText(mRule.getActivity().getString(R.string .app_name)))); } 

Si desea comprobar errorText de TextInputLayout , cambie esta línea:

  CharSequence error = ((TextInputLayout) view).getHint(); 

con

  CharSequence error = ((TextInputLayout) view).getError(); 

Espero que ayude

Solución más genérica que funcionaría con cualquier vista que tenga el método "getHint":

 public static Matcher<View> withCustomHint(final Matcher<String> stringMatcher) { return new BaseMatcher<View>() { @Override public void describeTo(Description description) { } @Override public boolean matches(Object item) { try { Method method = item.getClass().getMethod("getHint"); return stringMatcher.matches(method.invoke(item)); } catch (NoSuchMethodException e) { } catch (InvocationTargetException e) { } catch (IllegalAccessException e) { } return false; } }; } 

Uso:

 onView(withId(R.id.SomeLayout)).check(matches(withCustomHint(is("SomeString")))); 
  • Mocking resultados de los servidores en Android (Wiremock, MockWebServer etc)
  • Prueba de errores de EditText con Espresso en Android
  • La prueba de unidad que incluye un Toast en el código de producción falla
  • Prueba Espresso en un módulo separado
  • Reduzca el Espresso
  • Android Espresso: longClick () no funciona y se comporta como click ()
  • Compruebe el texto en la posición en el reciclador
  • Android: activar un botón
  • ConnectedAndroidTest cómo ejecutar pruebas específicas
  • Android espresso test NavigationView
  • Crear DummyActivity dentro de la carpeta androidTest para probar
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.