【发布时间】:2013-10-31 15:10:43
【问题描述】:
我正在使用 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 保证是非并发的,因此添加的最后一个操作将是最后一个执行的操作 - 这样您甚至不必更改代码来停止测试循环。
【问题讨论】:
-
重新;您对 Kazuki 答案的编辑(我看到您已经改变了主意)。如果您喜欢使用该内容添加您自己的答案,包括您使用的代码、其工作原理等
-
理想情况下,这样的答案会出现在答案框中,而不是问题本身;查看“回答您自己的问题”按钮
标签: ios objective-c xcode5 nsoperationqueue xctest