java - unitarias - test android studio
¿Puedo probar las notificaciones de la barra de estado con el marco de prueba de Android? (8)
Echa un vistazo a NotificationListenerService:
"Un servicio que recibe llamadas del sistema cuando se publican o eliminan notificaciones nuevas, o se cambia su clasificación".
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.
¿Alguien tiene una solución para esto?
Puede usar un emulador, solo 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 al NotificationManager (mManager) para verificar que tenga notificaciones activas después de enviar un mensaje de multidifusión al punto final http de Google FCM.
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.
Robotium no puede interactuar con la barra de notificaciones. Usted está restringido a una aplicación. Consulte las preguntas frecuentes sobre robotium, hay una mención de esto: http://code.google.com/p/robotium/wiki/QuestionsAndAnswers
Solo para ahorrarle 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.
Como 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ía que eso indicaría si una notificación ya tenía uno o no.
Lamentablemente, esto no parece ser confiable.
Tal vez no es la respuesta que está buscando, pero como siempre, la solución es:
- Crea una interfaz que resuma la funcionalidad de notificación.
- Cree una implementación predeterminada que delegue en la API de notificación del sistema.
- Al ejecutar las pruebas, reemplace (o decore) la implementación predeterminada con una implementación simulada que respalde las pruebas.
Esto se puede simplificar con la siguiente tecnología:
- Marcos de inyección de dependencias (como RoboGuice) para agilizar la elección de la implementación.
- Biblioteca burlona (como EasyMock) para automatizar la creación de implementaciones simuladas.
Esto es lo que quieres, creo. 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.
Intente crear un objeto Mock extendiendo NotificationManager y anule los métodos de 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.