我想能够测试一些代码,将pending intents
添加到Alarm Manager,但我可以创建自己的mock context
从getSystemService()
返回它我不能创建我自己的子类的Alarm Manager它有一个私人构造函数。创建一个模拟AlarmManager进行测试
会有另一种(更好的?)的方式能够测试我的代码是否正确添加(或不是)基于我的测试前提条件的警报?
我能想到的,我想能够测试一些代码,将pending intents
添加到Alarm Manager,但我可以创建自己的mock context
从getSystemService()
返回它我不能创建我自己的子类的Alarm Manager它有一个私人构造函数。创建一个模拟AlarmManager进行测试
会有另一种(更好的?)的方式能够测试我的代码是否正确添加(或不是)基于我的测试前提条件的警报?
我能想到的,两件事情可能会有所帮助:
检查报警已手动
adb shell dumpsys alarm | grep com.your.package
计划用于检查存在的代码,你可以设置闹钟使用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);
}
}
Upvote为Roboelectrics阴影的非常有用的链接,虽然他们不能很好地解决我的问题,据我所见? – Maks 2014-11-10 21:42:44
除非我误解了你的问题,否则第二个链接有一些相当不错的例子,它可以帮助你测试下一次警报。我已经用上述文章中的相关代码片段更新了答案。 – 2014-11-11 09:05:17
我通常去到我的设备上设置和手动跳日期提前到触发报警。 – FoamyGuy 2012-08-06 02:36:23
我希望能够自动运行测试,但这是一个有趣的想法......我可以改变尝试改变系统时间(在模拟器上测试)并测试以确定待处理的意图是否触发。 – Maks 2012-08-06 02:38:57