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?

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 .

  • Obtención de contexto en AndroidTestCase o InstrumentationTestCase en la función Prueba de unidad de Android Studio
  • ActivityInstrumentationTestCase2 vs ActivityTestRule
  • Pruebas de unidades de Android que requieren contexto
  • Android Studio Gradle androidTest vs instrumentTest
  • Prueba de la unidad MVP de Android: ¿debo burlar el bus de eventos?
  • AsyncTask onPostExecute () no se llama en caso de prueba de unidad
  • Android Studio simple Unidad de prueba no funciona
  • Unidad Método de prueba que no contiene lambda expresión Android Studio
  • Cómo burlar un objeto inyectado que no se declara en el módulo?
  • Los simulacros de Mockito ejecutan el código actual de Android en Lollipop o superior
  • Prueba de unidad de Android: subclase InstrumentationTestRunner no encontrada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.