Prueba de unidad de actividad
Tengo una actividad que preforma algún trabajo en segundo plano y basado en el resultado de este trabajo comienza una de las otras dos actividades. ¿Cómo puedo escribir una prueba de unidad para validar su comportamiento?
He intentado usar ActivityUnitTestCase pero explotar en un intento de mostrar un diálogo de progreso. Con ActivityInstrumentationTestCase2 no pude encontrar ninguna manera de interceptar la destrucción de la actividad. ¿Algún consejo?
- Acceso al contexto de la aplicación desde TestSuite en Setup () antes de llamar a getActivity ()
- Prueba de unidad de presentador con RxJava CompositeSubscription
- Prueba de unidad de Android: ActivityMonitor waitForActivityWithTimeout devuelve NULL, getActivity nunca devuelve, error de permiso de INJECT_EVENTS
- Crear proyecto de prueba de android en intellij idea 13 community edition
- Prueba de ciclo de vida de la actividad de Android
- Robolectric y Android Studio 1.1.0 y pruebas de biblioteca
- Creación de un simulador de AlarmManager para la prueba
- Cómo generar un informe de cobertura de código de casos de prueba de instrumentación en Android Studio
- No se puede verificar la llamada de método de simulación desde el suscriptor de RxJava
- Cómo probar una actividad usando google-api-client
- ¿Es una prueba UNIT o una prueba de integración?
- Multidex límite de golpear mientras se ejecutan casos de prueba de unidad
- Mockito / Power Mockito: incapaz de obtener la salida esperada cuando el método de burla de LayoutParams en android
ActivityInstrumentationTestCase2
es el método correcto cuando la otra clase está obsoleta. Para probar lo que ha sucedido después de su Actividad principal, llamémosla ProgressActivity
, debe usar ActivityMonitor . Creo que quieres interceptar la creación de la Activity
, no la destrucción.
Estoy asumiendo aquí que ProgressActivity comienza otra Activity
(digamos A1
, A2
o A3
) después de que un cierto cálculo se haga en el fondo.
Su caso de prueba debe ser algo como esto:
public static final HashSet<Class<? extends Activity>> TARGET_ACTIVITIES = new HashSet<Class<? extends Activity>>(); static { TARGET_ACTIVITIES.add(A1.class); TARGET_ACTIVITIES.add(A2.class); TARGET_ACTIVITIES.add(A3.class); } private static final int TIMEOUT = 7000; public void testRandomActivityStarted() { @SuppressWarnings("unused") ProgressActivity activity = getActivity(); final Instrumentation inst = getInstrumentation(); IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MAIN); intentFilter.addCategory("MY_CATEGORY"); ActivityMonitor monitor = inst.addMonitor(intentFilter, null, false); // Wait, before the Activity started monitor.waitForActivityWithTimeout(TIMEOUT); assertEquals(1, monitor.getHits()); Activity randomActivity = monitor.getLastActivity(); Log.d(TAG, "monitor=" + monitor + " activity=" + randomActivity); // Unfortunately, it seems randomActivity is always null even after a match if ( randomActivity != null ) { assertTrue(TARGET_ACTIVITIES.contains(randomActivity.getClass())); } inst.removeMonitor(monitor); }
El truco aquí es usar una categoría en el IntentFilter
, porque si getLastActivity()
de getLastActivity()
te puedes decepcionar, ya que parece que siempre es nulo. Para poder emparejar esta categoría usted debe utilizarla cuando usted comienza A1
, A2
o A3
( Intent.addCatrgory () )
Este ejemplo fue adaptado del que ilustra ActivityMonitor en la Guía de pruebas de aplicaciones de Android .
- Configuración del fondo para la aplicación básica de Android
- ¿Por qué no puedo anular onConfigurationChanged (Configuration)?