我花了一整天的时间试图找到一种方法来对我的本地通知进行单元测试。
我使用的是Swift 2.2和Xcode 7.3。
基本上,我有一个简化的API,它生成
在我的
我使用的是Swift 2.2和Xcode 7.3。
基本上,我有一个简化的API,它生成
UILocalNotification
,并通过UIApplication.sharedApplication().presentLocalNotificationNow
触发。在我的
AppDelegate
中,我实现了application:didReceiveLocalNotification
方法来显示一个UIAlertController
,如下所示。func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {
if application.applicationState == .Active {
var topController : UIViewController = (application.keyWindow?.rootViewController)!
while ((topController.presentedViewController) != nil) {
topController = topController.presentedViewController!
}
let alert = UIAlertController(title: notification.alertTitle, message: notification.alertBody, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: {(action: UIAlertAction!) in}))
topController.presentViewController(alert, animated: true, completion: nil)
}
}
手动运行时,这个工作得很好。我可以看到生成的消息和弹出的警报。
但是我想提供一个单元测试来验证这个功能。
我的iOS测试经验为零。
我的第一个想法是以某种方式模拟UIApplicationDeledgate
,以便我可以测试是否调用了application:didReceiveLocalNotification
,类似于 UIApplication.sharedApplication().delegate = mockedDelegate
,但当我尝试这样做时它崩溃了。
我的下一个想法是使用UI测试并监视警报对话框。部分地实现了这一点,我能够注册通知(并获得“允许通知”对话框,我能够使用XCTestCase
API通过它),但通知被呈现为横幅,而不是一个警报(从应用程序内部)!?
此时我不知道该尝试什么了。
目前我没有使用任何模拟框架,我的理解是Swift不太适合这些框架,除非我愿意从NSObject
扩展。