好的。我环顾四周,没有找到我的问题的确切答案。
我正在尝试在单元测试(而不是主要运行)中测试超时处理程序。
问题似乎在于[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]];
}
where continueCondition
可能是一些标志,表明超时处理程序已被调用,并且time_way_over_timeout
当前时间与预先计算的最大执行时间的比较(因此您可以为单元测试处理“超时测试超时”^^)
另请参阅这篇有关异步单元测试的博客文章:http://dadabeatnik.wordpress.com/2013/09/12/xcode-and-asynchronous-unit-testing/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)