我正在使用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保证是非并发的,因此添加的最后一个操作将是最后一个执行的操作-这样,您甚至不必更改代码即可停止测试循环。

最佳答案

IOS -NSRunLoop in XCTest: How Do I Get A Run Loop to Work in A Unit Test?相同

另外,aquarius / XCTestCase+MNAsynchronousTestCase.h对此很有帮助。

关于ios - 在XCTests中使用[NSOperationQueue mainQueue],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19523105/

10-11 04:34