在XCTests中使用[NSOperationQueue mainQueue]

时间:2013-10-22 16:14:20

标签: ios objective-c xcode5 nsoperationqueue xctest

我正在使用XCTest测试我的代码的一部分,该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保证是非并发的,所以最后添加的操作将是最后执行的操作 - 这样你甚至不必更改代码来停止测试循环。