8

アラーム マネージャーpending intentsに追加するコードをテストできるようにしたいのですが、独自のコードを作成して返すことはできますが、プライベート コンストラクターがあるため、アラーム マネージャーの独自のサブクラスを作成できません。mock contextgetSystemService()

テスト前の条件に基づいて、コードが正しくアラームを追加している (または追加していない) ことをテストできる別の (より良い?) 方法はありますか?

4

1 に答える 1

14

私が考えることができる2つのことが役立つかもしれません:

  1. アラームが手動でスケジュールされていることを確認するため

    adb shell dumpsys alarm | grep com.your.package

  2. コードにアラームが設定されていることを確認するには、Robolectric shadowsを使用できます。使用例を次に示します: http://www.multunus.com/blog/2014/03/tdd-android-using-robolectric-part-3/

(記事から)使用できます:

@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);
    }
}
于 2014-11-10T10:22:25.330 に答える