2016-05-09 10 views
3

私は最終日かそこらのローカル通知をユニットテストする方法を見つけようとしました。ユニットテストのローカル通知

私は基本的に7.3

をスウィフト2.2を使用してXcodeのよ、私は私のAppDelegateUIApplication.sharedApplication().presentLocalNotificationNow

を経由してトリガされUILocalNotificationを生成ストリップダウンAPIを、持っている私が示すことapplication:didReceiveLocalNotificationメソッドを実装していますこれを手動で実行する場合

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

を次のようにUIAlertController、これは正常に動作します。生成されたメッセージとアラートが表示されます。

私がしたいことは、この機能を検証するための単体テストを提供することです。

iOSをテストした経験はありません。

私の最初の考えは、私は、application:didReceiveLocalNotificationが呼び出されたかどうかを確認するために、私はそれがクラッシュし、これを実行しようとしましたUIApplication.sharedApplication().delegate = mockedDelegate、のようなものをテストすることができますので、何らかの方法でUIApplicationDeledgateをモックすることでした。

私の次の考えは、UIテストを使用して警告ダイアログを監視することでした。これはちょっとしたことで、通知用に登録できました(そして、XCTestCase APIを使ってタップすることができた「通知を許可する」ダイアログが表示されました)が、通知はアラートとしてではなくバナーとして表示されましたアプリケーション自体の中から)!?

この時点で、私は次に何を試すべきかについて迷っています。

私は現在モックフレームワークを使用していません。スウィフトは自分自身には役に立たないと私は理解していますが、これは私が読んでいるところです(NSObjectから拡張しない限り)。

答えて

0

あなたはローカル通知を作成し、このようなあなたのテストで直接呼び出すことによってデリゲートメソッドをテストすることができます。

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) 

あなたは通知アクションをテストするために、同様に他のデリゲートメソッドを呼び出すことができる、など