2

特定の通知が投稿されるまでスリープ/待機するための最良の方法は何ですか?

データを取得する非同期APIを備えたクラスがありNSNotification(通知はCocoaから送信されますが、回避することはできません)、単体テストを行う必要があります。

これまでのところ、私はセミビジーウェイトを理解しました:

[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:10]]

実行ループ通知の処理なしでは受信されません。しかし、必要な通知が来たらすぐに実行ループから抜け出すにはどうすればよいですか?

4

2 に答える 2

2

runMode:beforeDate: はループを 1 回だけ実行するため、通知が処理されたことを検出するまで、その呼び出しをループで使用できます (他に何もなければ、ハンドラーはテスト クラスのメンバー変数を YES に切り替えることができます)。

于 2009-07-27T23:40:37.373 に答える
1

これが通知に対するコードの反応を単体テストするだけの場合、スレッドをスリープ状態にするのはやり過ぎかもしれません。いくつかの疑問が頭に浮かびます...

  1. 通知応答が成功か失敗かをどのようにテストしますか? テストできる測定可能な副作用はありますか?
  2. 独自の NSNotification を送信して応答を測定できますか? (通常は NSRunLoop が処理すると述べていますが、通知をモックできれば、テストはより予測しやすくなります。)
  3. (何らかの理由で) 通知が送信されるかどうかをテストしようとしている場合、必要はありますか? (自動の場合は気にしないでください。ユーザーが生成した場合、単体テストは困難になる可能性がありますが、モックを作成することで作業を簡素化できます。)

テストするマルチスレッド シナリオを本当に作成する必要がある場合はtestLockUnlockこの単体テスト コードの例を参照してください。(私は自分のコードが、コレクションまたは一般化された可変オブジェクトに組み込まれたロックを適切に使用していることを確認しようとしていました。)

于 2009-07-27T23:01:23.693 に答える