6

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

4

1 回答 1

2

XCTest 中的 IOS -NSRunLoop 相同:如何让运行循环在单元测试中工作?

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

于 2013-10-22T17:10:28.117 回答