作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
好的。我环顾四周,没有找到我的问题的确切答案。
我正在尝试在单元测试(而不是主运行)中测试超时处理程序。
问题似乎是 [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/
我是一名优秀的程序员,十分优秀!