Necesito Robolectric y Mockito en mi prueba, cada uno propone su propio TestRunner

Necesito Robolectric y Mockito en mi prueba, cada uno propone su propio TestRunner, ¿qué hago?

Tengo este código:

@RunWith(MockitoJUnitRunner.class) @EBean public class LoginPresenterTest { @Bean LoginPresenter loginPresenter; @Mock private LoginView loginView; @AfterInject void initLoginPresenter() { loginPresenter.setLoginView(loginView); } @Test public void whenUserNameIsEmptyShowErrorOnLoginClicked() throws Exception { when(loginView.getUserName()).thenReturn(""); when(loginView.getPassword()).thenReturn("asdasd"); loginPresenter.onLoginClicked(); verify(loginView).setEmailFieldErrorMessage(); } } 

El problema es AndroidAnnotations no inyecta las dependencias y obtengo un NPE al intentar usar LoginPresenter

Alguien me dijo que usara el constructor LoginPresenter_ , para poder forzar la inyección de la dependencia de esta manera:

 LoginPresenter loginPresenter = LoginPresenter_.getInstance_(context); 

Con el fin de obtener acceso al contexto, tuve que cambiar de pruebas de unidad a pruebas de instrumentación de Android y hacer getInstrumentation().getTargetContext() pero quiero pruebas de unidad, y no de instrumentación.

Así que otra persona me dijo que usar Robolectric para eso – se supone que es capaz de proporcionarme un contexto de aplicación.

Sin embargo, cuando miré la página de inicio de Robolectric , dice

 @RunWith(RobolectricGradleTestRunner.class) 

Que va a chocar con mi anotación @RunWith actual para Mockito, así que ¿qué debo hacer?

Utilice el corredor Robolectric. Robolectric utiliza su propio cargador de clases que favorece sus reemplazos para la API de Android, por lo que realmente necesita manejar la carga de clases por sí solo. No hay otra forma de usar Robolecric.

Hay varias maneras de inicializar Mockito (ver esta respuesta SO ), que son estrictamente equivalentes a usar el corredor, pero los dos que tienen más sentido para su caso son:

  • Utilizando MockitoRule , porque ya estás en JUnit4:

     @Rule public MockitoRule rule = MockitoJUnit.rule(); 
  • Creación manual @Before y métodos @Before :

     @Before public void setUpMockito() { MockitoAnnotations.initMocks(this); } @After public void tearDownMockito() { Mockito.validateMockitoUsage(); } 
  • Robolectric + OkHttp + retrofit + prueba de unidad rxJava
  • Android: Unidad de pruebas de aplicaciones Android con Robolectric y Mockito
  • Soporte de la clase Robolectric de Android. Cómo tener las referencias de la clase de biblioteca R desde el proyecto de aplicación
  • ¿Cómo forzar un cambio de configuración en una prueba Android Robolectric?
  • Ejecución de una prueba de unidad específica con gradle
  • Archivo de cobertura de código Jacoco vacío que conduce a informes de cobertura falsa
  • Robolectric buildActivity () con espía Mockito?
  • Pruebas de unidades de Android fallan para tipo de compilación de depuración
  • Cómo deshabilitar las pruebas de unidad de estudio de Android (androidTest)
  • Comprobación de que se ha iniciado una actividad con FLAG_ACTIVITY_CLEAR_TOP
  • Prioridad de hilo: 'prueba de unidad'
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.