Espresso inyectando un objeto simulador presentador
Estoy tratando de conocer mejor el marco espresso para las pruebas en android, sin embargo, estoy teniendo un problema tratando de burlarse de mi presentador.
En primer lugar estoy usando alguna arquitectura MVP adaptada en mi aplicación, por lo tanto, estoy usando algo como Ver (Actividad) -> Presentador -> Modelo -> Presentador -> Ver, para hacer una solicitud y actualizar la interfaz de usuario.
- ¿El desarrollo de la interfaz de usuario de Android se presta bien a un patrón de diseño participativo?
- Ejemplo androide del presentador de la versión / ejemplos del regulador
- Creación de una clase de modelo de datos para el manejo de bases de datos
- Mejores prácticas phonegap architecture
- ¿Cómo puedo implementar el equivalente RxJava de INotifyPropertyChanged para hacer un modelo de datos Observable?
Mi actividad una vez creada hará una solicitud para actualizar toda la interfaz de usuario y una vez que el resultado se recibe actualiza la interfaz de usuario en consecuencia.
public class MyActivity extends AppCompatActivity implements IPresenter{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_activity); new Presenter().doRequestToUpdateUI(); } @Override public void onResponseReceived(UIObject uiOject){ findViewById(R.id.button).setVisibility(uiOject.getVisibility()); } }
Sin embargo, este doRequestToUpdateUI () necesita alguna autenticación previa y por lo tanto el presentador de agujero necesita ser burlado, con el fin de probar la otra interfaz de usuario en mi actividad.
¿Hay una manera de burlarse de mi presentador e inyectarlo a la actividad, o al menos no hacer nada cuando se llama al método doRequestToUpdateUI ().
Estoy haciendo mi prueba como esta, pero hasta ahora no funciona.
@LargeTest @RunWith(AndroidJUnit4.class) public class MyActivityInstrumentationTest { @Mock public Presenter presenter; @InjectMocks public PresenterMock mPresenterMock; @Rule public ActivityTestRule<MyActivity> mActivityTestRule = new ActivityTestRule<MyActivity>(MyActivity.class, true, false) { @Override protected void beforeActivityLaunched() { presenter = Mockito.mock(Presenter.class); Mockito.doNothing().when(presenter).doRequestToUpdateUI(); super.beforeActivityLaunched(); } }; @Test public void simpleTestCheck() { mActivityTestRule.launchActivity(new Intent()); //here I should call the onResponseReceived() with a mock object however the presenter is not being injected widthId(R.id.button).matches(isDisplayed()); } }