单元测试:检查警报是否被取消

时间:2014-09-28 12:52:00

标签: android unit-testing alarmmanager

我正在为我的应用程序编写单元测试,我想测试,如果警报被正确取消,但我找不到合适的解决方案来做到这一点。我熟悉使用带有FLAG_NO_CREATE标志的PendingIntent.getBroadcast()来检查警报是否处于活动状态的方法。

我成功地在同一个测试中成功使用了getBroadcast()函数,首先检查是否在应用程序启动时设置了警报,然后检查是否设置了警报,两次都返回预期的布尔值

      public void testTimerButtonStartProcess(){

      Intent intent = new Intent (appContext, OnAlarmReceiver.class);
      intent.putExtra(Scheduler.PERIOD_TYPE, 1);
      intent.putExtra(Scheduler.DELAY_COUNT, 0);
      intent.setAction(Scheduler.CUSTOM_INTENT_ALARM_PERIOD_END);
      boolean alarmUp = (PendingIntent.getBroadcast(appContext, 0, intent,PendingIntent.FLAG_NO_CREATE) != null);

      assertFalse("the alarm manager wasnt running when app is lauched", alarmUp);

      solo.clickOnView(timerLayout);
      instr.waitForIdleSync();
      solo.sleep(5000);
      alarmUp = (PendingIntent.getBroadcast(appContext, 0, intent,PendingIntent.FLAG_NO_CREATE) != null);
      assertTrue("the alarm is set", alarmUp);


  }

但是当我尝试以相反的顺序执行此操作时(首先检查警报是否已设置然后再设置 - 如果不再设置),我的测试失败,因为在第二次检查后(应该取消警报时) getBroadcast()返回true(我希望得到假)。

      public void testTimerButtonLongPress(){

      solo.clickOnView(timerLayout);
      instr.waitForIdleSync();
      Intent intent = new Intent (appContext, OnAlarmReceiver.class);
      intent.putExtra(Scheduler.PERIOD_TYPE, 1);
      intent.putExtra(Scheduler.DELAY_COUNT, 0);
      intent.setAction(Scheduler.CUSTOM_INTENT_ALARM_PERIOD_END);
      boolean alarmUp = (PendingIntent.getBroadcast(appContext, 0, intent,PendingIntent.FLAG_NO_CREATE) != null);         
      assertTrue("the alarm manager is running", alarmUp);
      solo.clickLongOnView(timerLayout, 1500);
      instr.waitForIdleSync();
      solo.sleep(3000);
      alarmUp = (PendingIntent.getBroadcast(appContext, 0, intent,PendingIntent.FLAG_NO_CREATE) != null);
      assertFalse("the alarm manager was not running anymore", alarmUp);

  }

我也尝试在应用程序取消警报后只使用一次getBroadcast,但我仍然返回true。

与此同时,我确信,警报的取消按预期工作,因为应用程序在“关闭”后停止警报。

0 个答案:

没有答案