2012-08-06 44 views
7

我想能够测试一些代码,将pending intents添加到Alarm Manager,但我可以创建自己的mock contextgetSystemService()返回它我不能创建我自己的子类的Alarm Manager它有一个私人构造函数。创建一个模拟AlarmManager进行测试

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

我能想到的,
+0

我通常去到我的设备上设置和手动跳日期提前到触发报警。 – FoamyGuy 2012-08-06 02:36:23

+0

我希望能够自动运行测试,但这是一个有趣的想法......我可以改变尝试改变系统时间(在模拟器上测试)并测试以确定待处理的意图是否触发。 – Maks 2012-08-06 02:38:57

回答

9

两件事情可能会有所帮助:

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

Upvote为Roboelectrics阴影的非常有用的链接,虽然他们不能很好地解决我的问题,据我所见? – Maks 2014-11-10 21:42:44

+0

除非我误解了你的问题,否则第二个链接有一些相当不错的例子,它可以帮助你测试下一次警报。我已经用上述文章中的相关代码片段更新了答案。 – 2014-11-11 09:05:17