我正在使用XCTest測試我的代碼的一部分,它也在主隊列中添加了NSOperations。 它看起來像這樣:在XCTests中使用[NSOperationQueue mainQueue]
[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是保證非併發所以最後操作這添加將是最後一個執行 - 這樣你甚至不必改變你的代碼來停止測試循環。
請參閱http://stackoverflow.com/questions/12463733/objective-c-unit-testing-dispatch-async-block –
Re;你編輯Kazuki的答案(我看你已經改變了主意)。如果你喜歡你使用該內容添加自己的答案,包括你使用的代碼,爲什麼它的工作等 –
理想情況下,這樣的答案會在答案框中,但不是在問題本身;看到「回答你自己的問題」按鈕 –