创建模拟AlarmManager以进行测试

Mak*_*aks 8 android unit-testing

我希望能够测试一些添加pending intentsAlarm Manager的代码,但是我可以创建自己的代码mock context以便从中返回它getSystemService()因为它有一个私有构造函数而无法创建我自己的Alarm Manager子类.

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

Ben*_*son 12

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

  1. 用于检查警报已手动安排

    adb shell dumpsys alarm | grep com.your.package

  2. 检查是否有代码报警设置你可以使用Robolectric 阴影.以下是使用它的示例: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);
    }
}
Run Code Online (Sandbox Code Playgroud)