6

メイン キューに NSOperations も追加する XCTest を使用して、コードの一部をテストしています。次のようになります。

[NSOperationQueue mainQueue] addOperationAsBlock:^{ // some code happens here }];

デバイスまたはシミュレーターでアプリを実行するとコードが実行されますが、単体テストを実行するとまったく実行されません (ブロックの最初の行のデバッグ ポイントに到達できません)。

呼び出し:

[NSOperationQueue mainQueue] waitUntilAllOperationsAreFinished];

同様に役に立ちません。

助言がありますか?キューを初期化するためのコードが不足していると思います。

* 編集 *

ご回答いただきありがとうございます。完全を期すために結果のコードを追加しました。

// add as many operations as you'd like to the mainQueue here
__block BOOL continueCondition = YES;
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    // this should be the last operation
    continueCondition = NO;
}];
while (continueCondition)  {
    [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
} // continue your test here

これが機能するのは、mainQueue が非並行であることが保証されているため、追加された最後の操作が最後に実行されるためです。この方法では、テスト ループを停止するためにコードを変更する必要さえありません。

4

1 に答える 1