创build一个模拟的AlarmManager进行testing

我想能够testing一些代码,添加pending intents到警报pipe理器,但是我可以创build自己的mock contextgetSystemService()返回它我不能创build我自己的报警pipe理器的子类,因为它有一个私人构造函数。

会有另一个(更好的?)的方式,让我能够testing我的代码正确地添加(或不)基于我的testing前提条件的警报?

  • 活动生命周期unit testing
  • 使用ActivityUnitTestCase和PreferenceManager来testingAndroid
  • 如何在Android的unit testing和仪器testing之间共享资源?
  • Androidunit testing:如何清除SharedPreferences
  • android数据绑定unit testing错误无法解析数据绑定编译器选项。 PARAMS:
  • Android上的unit testing期间的区域设置
  • 如何使用mock()和spy()来testing静态方法
  • Espresso自定义ViewMatcher不匹配描述不会出现在日志中
  • 我能想到的两件事可能会有所帮助:

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