ios – 单元测试本地通知

前端之家收集整理的这篇文章主要介绍了ios – 单元测试本地通知前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我花了最后一天左右试图找出一种方法来对我的本地通知进行单元测试.

我正在使用Swift 2.2和Xcode 7.3

基本上,我有一个生成UILocalNotification的精简API,它通过UIApplication.sharedApplication()触发.presentLocalNotificationNow

在我的AppDelegate中,我实现了应用程序: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所以我可以测试是否调用了应用程序:didReceiveLocalNotification,类似于UIApplication.sharedApplication().委托= mockedDelegate,当我试图这样做时它崩溃了.

我的下一个想法是使用UI测试和监视器进行警报对话框.这工作到了一定程度,我能够注册通知(并获得“允许通知”对话框,我可以使用XCTestCase API轻松通过),但通知显示为横幅,而不是警报(从应用程序本身内部)!?

在这一点上,我不知道接下来要尝试什么.

我目前没有使用任何模拟框架,我的理解是Swift并不适合他们,但这只是我的阅读(除非我愿意从NSObject扩展).

解决方法

您可以通过创建本地通知并在测试中直接调用它来测试委托方法,如下所示:

let notification = UILocalNotification()
notification.alertBody = "Attention!"
var userInfo  = [String: String]()
userInfo["name"] = "notification"
notification.userInfo = userInfo
// further notification setup

let appDelegate = UIApplication.sharedApplication().delegate
appDelegate?.application!(UIApplication.sharedApplication(),didReceiveLocalNotification: notification)

您可以类似地调用其他委托方法来测试通知操作等.

猜你在找的iOS相关文章