我正在使用 XCTest 测试我的代码的一部分,它还在主队列上添加了 NSOperations。它看起来像这样:
[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 保证是非并发的,因此添加的最后一个操作将是最后一个执行的操作 - 这样您甚至不必更改代码来停止测试循环。