2012-08-06 15 views
7

voglio essere in grado di testare un po 'di codice che aggiunge pending intents al Alarm Manager ma mentre io posso creare il mio mock context per restituirlo a partire getSystemService() non posso creare la mia classe di sub di Alarm Manager causa ad esso avendo un costruttore privato.Creazione di un AlarmManager finto per testare

Ci sarebbe un altro (migliore?) Modo per me di essere in grado di verificare che il mio codice sia in grado di aggiungere (o meno) allarmi in base alle mie condizioni pre test?

+0

Io di solito vado in impostazioni di dispositivo e salto manualmente la data in avanti per far scattare l'allarme. – FoamyGuy

+0

Voglio essere in grado di eseguire i test automaticamente, ma questa è un'idea interessante ... Potrei cambiare provare a cambiare il tempo di sistema (test sull'emulatore) e testare per vedere se gli intenti in sospeso si attivano. – Maks

risposta

9

Due cose mi vengono in mente che potrebbe aiutare:

  1. per controllare l'allarme è stato programmato manualmente

    adb shell dumpsys alarm | grep com.your.package

  2. per il controllo di un allarme impostato nel codice è possibile utilizzare Robolectric shadows. Ecco un esempio di esso in uso: http://www.multunus.com/blog/2014/03/tdd-android-using-robolectric-part-3/

è possibile utilizzare (da questo articolo):

@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 per il link molto utile alle ombre Roboelectrics, anche se non riescono a risolvere il mio problema qui per quanto posso vedere? – Maks

+0

A meno che non avessi frainteso la tua domanda, il secondo link aveva alcuni buoni esempi di test per il prossimo allarme da parte di shadowing alarm manager che dovrebbe aiutare. Ho aggiornato la risposta con uno snippet di codice pertinente dall'articolo di cui sopra. –

Problemi correlati