2016-03-23 12 views
3

このトピックに関するいくつかの既存の質問がありますが、それは私が後にしていることではありません。私は2つのUIAlertControllerインスタンスを提示する私のアプリケーションのための少しスウィフトアプリの評価のプロンプトを書いたが、もう1つは、他のものによって引き起こされる。UIAlertControllerのUIAlertActionをプログラムによってトリガーしますか?

私は現在これをユニットテストしようとしており、テストでその2番目のアラートに到達しようとしています。私は最初のコントローラをチェックするために単純なスパイを書いたが、最初のアラートでアクションの1つをトリガする方法を望んでいる。

私はすでにalert.actions.first?.accessibilityActivate()を試しましたが、そのアクションのハンドラの中で壊れているようには見えませんでした。ここで

答えて

4

は私がやったことおおよそです:

  1. アラートコントローラを提示する私のクラスの嘲笑のバージョンを作成し、私のユニットテストでは、このモックを使用していました。

  2. オーバーライド私は非嘲笑のバージョンで作成されたのだ、次の方法:オーバーライドされた実装では

    func alertActionWithTitle(title: String?, style: UIAlertActionStyle, handler: Handler) -> UIAlertAction 
    
  3. は、(Handlerはちょうどtypealiasあるいくつかのプロパティでのアクションに関するすべての詳細を保存しますアラートを通るパスを横断する、私のテストを実行している、私はトンを反復するcallHandlerAtIndexメソッドを実装次にD」() -> (UIAlertAction)

    var didCreateAlert = false 
    var createdTitles: [String?] = [] 
    var createdStyles: [UIAlertActionStyle?] = [] 
    var createdHandlers: [Handler?] = [] 
    var createdActions: [UIAlertAction?] = [] 
    
  4. 、私のハンドラを通し、正しいものを実行してください。

    feedback.start() 
    feedback.callHandlerAtIndex(1) // First alert, second action 
    feedback.callHandlerAtIndex(2) // Second alert, third action 
    XCTAssertTrue(mockMailer.didCallMail) 
    

は、これは私のテストはこのような何かを見ていることを意味します

関連する問題