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:
- ¿Por qué Robotium es más lento cuando realiza tareas sencillas de interfaz de usuario en comparación con el código nativo de Android?
- Crear PDU para Android
- Cobertura de código con jacoco para una biblioteca de Android
- ActivityUnitTestCase arroja RuntimeException cuando se ejecuta con AndroidJUnitRunner
- Prueba de unidad de Android con Retrofit2 y Mockito o Robolectric
@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?
- Android, Gradle. Cómo construir aplicaciones y ejecutar pruebas desde la aplicación de prueba
- Gradle - equivalente de test {} bloque de configuración para android
- ¿Cómo probar mejor el código Looper y Handler de la unidad en Android?
- ¿Cuál es la forma más rápida de ejecutar pruebas de unidad en Android
- `RenamingDelegatingContext` está obsoleto. ¿Cómo probamos SQLite db ahora?
- UnitTest JSONObject muestra null
- Unidad de pruebas de creación de una base de datos SQLite utilizando Spock y Robospock
- Prueba de unidades de Android en Eclipse: "Error al iniciar la prueba"
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(); }
- Android: Iniciar una actividad para una aplicación de terceros diferente
- Android que lee el almacenamiento externo da securityException