2013-02-17 10 views
5

私はSocketRocketライブラリを使用してWebsocketへの接続を処理しています。それはうまく接続しますが、私は最初にWS接続を待たなければならない単位テストを実行しようとしています。 WSが接続されていることを知る唯一の方法はデリゲートメソッドであるため、このプロセスを同期させるのに問題があります。私は単体テストのsetupメソッドでWS接続を作成してからtearDownメソッドを閉じるだけです。Websocketが接続するまで実行を一時停止します

Websocketクラスに2種類の接続方法を実装しました。最初の2つはかなり基本的なもので、期待通りに動作することを確認しました。最後のテストは、主にテスト目的でブロックする試みです。私はそれを働かせることができませんでした、そして、それはちょうど永遠に待って終わるので、私はそれが私の部分で概念的な誤解だと信じています。

私の大きな疑問は、デリゲートへの戻り呼び出しを待つテストケースで実行を停止する方法です。テストケースで発生する問題は、完成ブロックですべてのテストを行うだけではできないということです。テストメソッドはこれを成功とみなしてプログラムを終了させます。

答えて

4

セマフォが通知されるのを待っている間、メインスレッドはブロックされているため、コードはまったく実行できません。ライブラリがrunloopシステムと統合されている場合は、セマフォを待つ代わりにCFRunLoopRun()を使用してrunloopを実行できます。準備完了コールバックから、CFRunLoopStop(CFRunLoopGetMain())を使用してランループを停止することができます。

+0

はい!これは完全に機能し、私は何か新しいことを学びました。ありがとう! – joslinm

関連する問題