创建模拟AlarmManager以进行测试

时间:2012-08-06 02:25:51

标签: android unit-testing

我希望能够测试一些将pending intents添加到Alarm Manager的代码,但我可以创建自己的mock context以从getSystemService()返回{I}我可以&# 39;创建我自己的Alarm Manager子类,因为它有一个私有构造函数。

我是否还有另一种(更好的?)方式能够根据我的测试前提条件测试我的代码是否正确添加(或不添加)警报?

1 个答案:

答案 0 :(得分:12)

我能想到的两件事可能有所帮助:

  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/

  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);
        }
    }