XOSest中的IOS -NSRunLoop:如何在单元测试中运行循环?

Chr*_*all 8 unit-testing ios

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

我试图在单元测试中测试超时处理程序(而不是主程序).

问题似乎[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/

  • 链接的wordpress博客文章现在受到保护,需要身份验证:( (8认同)