2012-08-06 9 views
7

Quiero ser capaz de probar algo de código que se suma a la pending intentsAlarm Manager pero mientras puedo crear mi propia mock context para volverlo a partir getSystemService() no puedo crear mi propia subclase de Alarm Manager debido tener un constructor privadoCreación de un simulacro para probar AlarmManager

¿Habría otra (¿mejor?) Forma de poder probar que mi código está agregando (o no) alarmas correctamente en base a mis condiciones previas a la prueba?

+0

generalmente entro en configuración de mi dispositivo y salto manualmente la fecha hacia adelante para disparar la alarma. – FoamyGuy

+0

Quiero poder ejecutar las pruebas automáticamente, pero esa es una idea interesante ... Podría cambiar intentar cambiar el tiempo del sistema hacia adelante (probando en el emulador) y probar para ver si los intentos pendientes se disparan. – Maks

Respuesta

9

Dos cosas que se me ocurren que podrían ayudar:

  1. para comprobar la alarma ha sido programada manualmente

    adb shell dumpsys alarm | grep com.your.package

  2. para comprobar que hay una alarma definida en el código que puede use Robolectric shadows. He aquí un ejemplo de que sea utilizado: http://www.multunus.com/blog/2014/03/tdd-android-using-robolectric-part-3/

usted podría utilizar (del artículo):

@RunWith(RobolectricTestRunner.class) 
public class ResetAlarmTest { 
    ShadowAlarmManager shadowAlarmManager; 
    AlarmManager alarmManager; 

    @Before 
    public void setUp() { 
     alarmManager = (AlarmManager) Robolectric.application.getSystemService(Context.ALARM_SERVICE); 
     shadowAlarmManager = Robolectric.shadowOf(alarmManager); 
    } 

    @Test 
    public void start_shouldSetRepeatedAlarmWithAlarmManager() { 
     Assert.assertNull(shadowAlarmManager.getNextScheduledAlarm()); 
     new ResetAlarm(Robolectric.application.getApplicationContext()); 
     ScheduledAlarm repeatingAlarm = shadowAlarmManager.getNextScheduledAlarm(); 
     Assert.assertNotNull(repeatingAlarm); 
    } 
} 
+0

Upvote por el enlace muy útil a las sombras de Roboelectrics, aunque no pueden resolver mi problema aquí hasta donde puedo ver? – Maks

+0

A menos que malinterprete su pregunta, el segundo enlace tenía algunos ejemplos bastante buenos de pruebas para la próxima alarma mediante el administrador de alarmas de seguimiento, lo que debería ayudar. Actualicé la respuesta con un fragmento de código relevante del artículo mencionado anteriormente. –

Cuestiones relacionadas