2010-10-28 13 views
33

Tengo una clase que envía una notificación de barra de estado en Android. No puedo encontrar una forma de comprobar si la notificación fue enviada o no, lo que hace que sea muy difícil escribir cualquier tipo de prueba de unidad útil.¿Puedo probar las notificaciones de la barra de estado usando el marco de prueba de Android?

¿Alguien tiene una solución para esto?

+0

Existe un marco de pruebas llamado robotium, pero no sé si admite notificaciones. Pero en caso de que el lib de junit no lo soporte, puede verificar allí tal vez. http://code.google.com/p/robotium/ –

Respuesta

5

Quizás no sea la respuesta que está buscando, pero como siempre la solución es:

  • crear una interfaz abstraer la funcionalidad de notificación.
  • Crea una implementación predeterminada que delegue en la API de notificaciones del sistema.
  • Al ejecutar pruebas, reemplace (o decore) la implementación predeterminada con una implementación simulada que admita pruebas.

Esto se puede simplificar con la siguiente tecnología:

  • marcos de inyección de dependencias (tales como RoboGuice) para agilizar la elección de implementación.
  • Biblioteca burlona (como EasyMock) para automatizar la creación de implementaciones simuladas.
1

Resolvió un tipo similar de situación almacenando detalles de notificación en el almacén de datos antes de enviar y marcar como confirmado cada vez que el usuario ingresa a la aplicación a través de la barra de notificaciones. Como el robotium está restringido a los límites de la aplicación, no puede acceder a los datos del sistema, por lo tanto, probó el comportamiento utilizando la prueba unitaria basada en junit/jmockit.

4

Intente crear un objeto Mock extendiendo NotificationManager y anule los métodos notify(). Las funciones anuladas se pueden afirmar. En su (s) caso (s) de prueba, inyecte el simulacro a la actividad del tema y ejecute las pruebas con la Prueba JUnit de Android.

2

UI Testing

Esto es lo que quieres que pienso. El uiautomator.

Funciona solo en Android 4.1 o superior. Primero debe ejecutar el código de muestra.

Puede escribir un fragmento de código para realizar la acción de barra de estado desplegable y luego hacer sus cosas. Esta es solo la prueba de UI. No puedes probar tus datos con uiautomator.

Espero que esto ayude.

-1

Solo para ahorrar tiempo a otros: una cosa que parece que debería detectar notificaciones, pero no lo hace, está intentando crear un PendingIntent con el indicador NO_CREATE.

Dado que los intentos de crear un PendingIntent con los mismos valores que una notificación existente, pero con el indicador NO_CREATE, deberían devolver un valor nulo, parecían indicar si una notificación ya tenía uno o no.

Lamentablemente, esto no parece ser confiable.

1

Puede utilizar un emulador, sólo para este tipo de pruebas, con Android Marshmallow (API 23).

Por ejemplo:

public void testCheckNotification_2() throws IOException, InterruptedException, GcmException 
{ 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     GcmResponse gcmResponse = endPointImp.sendGcmMulticastRequestImp(getGcmMultiRequest()); 
     assertThat(gcmResponse.getSuccess(), is(1)); 
     Thread.sleep(2000); 
     assertThat(mManager.getActiveNotifications().length, is(1)); 
     StatusBarNotification barNotification = mManager.getActiveNotifications()[0]; 
     assertThat(barNotification.getId(), is(INCIDENCIA.getTitleRsc())); 

     // We check the pending intent. 
     PendingIntent pendingIntent = barNotification.getNotification().contentIntent; 
     assertThat(pendingIntent.getCreatorPackage(), is(GcmRequest.PACKAGE_DIDEKINDROID)); 
    } 
} 

La parte importante es la llamada a la NotificationManager (mManager) para comprobar que tiene notificaciones activas después de enviar un mensaje de multidifusión a Google FCM extremo HTTP.

Cuestiones relacionadas