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

标签 ios unit-testing

好的。我环顾四周,没有找到我的问题的确切答案。

我正在尝试在单元测试(而不是主运行)中测试超时处理程序。

问题似乎是 [NSRunLoop mainRunLoop] 没有像在标准运行中那样在单元测试中运行。

我以这种方式超时:

NSTimer *pTimeoutHandler = [NSTimer 
    timerWithTimeInterval:2.0 
    target:self 
    selector:@selector(timeoutHandler:) 
    userInfo:nil 
    repeats:NO
];
[[NSRunLoop mainRunLoop] addTimer:pTimeoutHandler forMode:NSRunLoopCommonModes];

这在标准运行中有效。这是设置超时的推荐方式。

但是,在测试运行中,这不起作用。 timeoutHandler:(NSTimer*)timer 例程从未被调用。

似乎有什么东西干扰了运行循环。

有什么方法可以使超时在运行和单元测试中都起作用?

最佳答案

当您使用定时器和主运行循环时,您将需要手动运行运行循环:

while (continueCondition || !time_way_over_timeout)  {
    [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}

continueCondition可以是一些标志,指示超时处理程序被调用,time_way_over_timeout当前时间与预先计算的最大执行时间的比较(所以你可以为您的单元测试处理“超时测试超时”^^)

另请参阅这篇关于异步单元测试的博文:http://dadabeatnik.wordpress.com/2013/09/12/xcode-and-asynchronous-unit-testing/

关于IOS -XCTest : How Do I Get A Run Loop to Work in A Unit Test? 中的 NSRunLoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19522898/

相关文章:

ios - 无法在 UIWebView 中显示 RSS

c# - 如何为调用同一类中其他方法的方法创建基于状态的测试?

java - Robolectric 未正确处理 getApplicationContext() - NPE

ios - 如何使用 UIActivityViewController 在推特上分享视频

ios - AVFoundation 在导出带有文本层的视频时崩溃

ios - 以编程方式更改 three20 TTTableImageItem 的图像

swift - 使用或不使用主机应用程序对自定义 iOS 框架进行单元测试

java - 在一份 testNG 报告中显示多个测试套件的所有失败测试

typescript - Jest 模拟节点模块不适用于 typescript

ios - 返回另一个 View Controller IOS7 后如何暂停音频一次