2012-08-06 11 views
7

Ich möchte einige Code testen können, die pending intents zum Alarm Manager fügt aber während ich meine erstellen eigene mock context es zurück von getSystemService() kann ich nicht meine eigene Unterklasse von Alarm Manager aufgrund erstellen dazu einen privaten Konstruktor zu haben.ein Mock Alarmmanager Erstellen zum Testen

Würde es einen anderen (besseren?) Weg für mich geben, um zu testen, dass mein Code korrekt Alarme (basierend auf meinen Testvorbedingungen) hinzufügt (oder nicht)?

+0

ich in der Regel in Einstellungen auf dem Gerät gehen und springe manuell das Datum nach vorne um den Alarm auszulösen. – FoamyGuy

+0

Ich möchte in der Lage sein, die Tests automatisch zu starten, aber das ist eine interessante Idee ... Ich könnte ändern versuchen, die Systemzeit vorwärts zu ändern (Testen auf dem Emulator) und testen, ob die ausstehenden Absichten feuern. – Maks

Antwort

9

Zwei Dinge, die ich von dem helfen könnte denken kann:

  1. zur Überprüfung der Alarm manuell kann

  2. denn es überprüft wird ein Alarm im Code festgelegt

    adb shell dumpsys alarm | grep com.your.package

    geplant ist Sie Verwenden Sie Robolectric shadows. Hier ist ein Beispiel dafür verwendet werden: http://www.multunus.com/blog/2014/03/tdd-android-using-robolectric-part-3/

Sie (aus dem Artikel) verwendet:

@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 für den sehr nützlichen Link zu Roboelectrics Schatten, obwohl sie mein Problem hier nicht so weit lösen können, soweit ich sehen kann? – Maks

+0

Wenn ich Ihre Frage nicht missverstanden habe, gab es auf der zweiten Verbindung einige ziemlich gute Beispiele für das Testen des nächsten Alarms durch Shadowing Alarm Manager, der helfen sollte. Ich habe die Antwort mit einem relevanten Codeausschnitt aus dem oben genannten Artikel aktualisiert. –