Pregunta

Tal vez me falta algo. Quiero escribir casos de prueba para un BroadcastReceiver; específicamente, es para recibir el evento BOOT_COMPLETED y el establecimiento de una alarma para otro receptor de mango más tarde; no parece estar preparando adecuadamente, pero el punto es que no tengo ninguna manera obvia para probarlo. No puedo adjuntar exactamente un depurador y esperar a que BOOT_COMPLETED, y no puedo enviar una falsificación BOOT_COMPLETED emisión.

¿Por qué hay clases de instrumentación para la actividad, servicio, y el proveedor, pero no BroadcastReceiver? Cualquier consejo para probar esto?

¿Fue útil?

Solución

No hay nada mágico sobre el ciclo de vida para el BroadcastReceiver. Es suficiente para probarlo con un AndroidTestCase. En un caso de prueba, instancia su BroadcastReceiver, crear lo Intención que desea enviar y llamar a OnReceive utilizando el contexto disponible de AndroidTestCase o algún contexto simulado.

por ejemplo.

public class TestMyBroadcastReceiver extends AndroidTestCase {
  public void testReceive() {
    MyBroadcastReceiver r = new MyBroadcastReceiver();
    Intent i = new Intent("MY_ACTION");
    // TODO put extras
    r.onReceive(getContext(), i);
    // TODO query application state to verify results
  }
}

Otros consejos

Para la mayoría de los casos estoy completamente de acuerdo con ??https://stackoverflow.com/a/5181010/527016

Hay sin embargo casos cuando se extiende AndroidTestCase no es adecuado (y puede causar sorpresas). En particular, si usted está haciendo las pruebas de integración más compleja y desea probar su BroadcastReceiver con un Intent real enviada por el sistema. La razón principal es que el método onReceive en el receptor de radiodifusión se ejecuta en el hilo principal aplicación, mientras que las pruebas de funcionamiento AndroidTestCase en otro hilo. Esto puede causar problemas de threads de prueba relacionada en el código que no fue pensado para funcionar en varios subprocesos.

La solución a esto es a subclase su prueba de InstrumentationTestCase lugar y el uso de la anotación @UiThreadTest para hacer las pruebas se ejecutan en el mismo hilo como el método onReceive.

Para obtener más información (y un ejemplo) véase: http : //olafurhelgason.blogspot.com/2012/12/threading-and-android-integration.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top