好.我环顾四周,没找到问题的确切答案.
我试图在单元测试中测试超时处理程序(而不是主程序).
问题似乎[NSRunLoop mainRunLoop]是它没有像标准Run那样在单元测试中运行.
我以这种方式做我的超时:
NSTimer *pTimeoutHandler = [NSTimer
timerWithTimeInterval:2.0
target:self
selector:@selector(timeoutHandler:)
userInfo:nil
repeats:NO
];
[[NSRunLoop mainRunLoop] addTimer:pTimeoutHandler forMode:NSRunLoopCommonModes];
Run Code Online (Sandbox Code Playgroud)
这适用于标准运行.这是建议设置超时的方法.
但是,在测试运行中,这不起作用.timeoutHandler:(NSTimer*)timer永远不会调用该例程.
看起来好像有什么东西在干扰运行循环.
有没有办法让我在运行和单元测试中都能使用超时?
Mar*_*ich 11
当您使用计时器和主runloop时,您将需要手动运行runloop:
while (continueCondition || !time_way_over_timeout) {
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
Run Code Online (Sandbox Code Playgroud)
where continueCondition可能是一些标志,表示调用了超时处理程序time_way_over_timeout,并将当前时间与预先计算的最大执行时间进行比较(因此您可以处理单元测试的"超时测试超时"^^)
另请参阅有关异步单元测试的博客文章:http://dadabeatnik.wordpress.com/2013/09/12/xcode-and-asynchronous-unit-testing/
| 归档时间: |
|
| 查看次数: |
4685 次 |
| 最近记录: |