如何测试.NSCalendarDayChanged通知(Swift)?

问题描述 投票:0回答:1

我试图找出如何最好地测试以下代码片段,而不必等待实际日期更改:

NotificationCenter.default.addObserver(self, selector: #selector(calendarDayDidChange(notification:)), name: .NSCalendarDayChanged, object: nil)

测试它的一种方法似乎是手动发布通知:

NotificationCenter.default.post(name: .NSCalendarDayChanged, object: nil)

当我测试对#selector函数的更改时,这很好。

但是,在此“测试模式”下,观察者无法捕获后续的日期更改(在午夜之后或在唤醒电话后的某个时间)。

我的问题是:

如果手动发布初始触发器,观察者是否应捕获后续日期更改(即,它应捕获手动触发器,明天的日期更改,以及第二天的日期更改,等等?

或者,通过手动发布触发观察者是否以某种方式拧紧了观察者,使其错过了后续的日期更改(即,为了赶上明天的日期更改,我必须删除发布代码)?

或者,是否没有相对于.NSCalendarDayChanged正确设置观察者?


一个相关的问题:对于每小时的时间更改(例如.NSHourChanged),是否具有等效于.NSCalendarDayChanged的功能,以加快对已执行代码的测试?

swift date nscalendar notificationcenter addobserver
1个回答
0
投票
经过一番反复的尝试...

    删除通知的手动发布:
  • NotificationCenter.default.post(name: .NSCalendarDayChanged, object: nil)

      按照@Leo Dabus的建议,将设备上的日期/时间手动重置为晚上11:59。
  • 在这些条件下,

    NotificationCenter.default.addObserver(self, selector: #selector(calendarDayDidChange(notification:)), name: .NSCalendarDayChanged, object: nil)

    将在更改日期后触发#selector函数,但仅当应用程序返回到前台时(不幸的是)它会触发。我从这里的其他一些线程了解到,观察者将在后台模式下运行。任何人都可以确认它是否按预期工作(即,仅当应用程序进入前台时才会观察到日期更改)?
  • © www.soinside.com 2019 - 2024. All rights reserved.