我正在使用XCTest和OCMock编写iOS应用程序的单元测试,我需要指导如何最好地设计单元测试,以验证方法是否导致NSTimer启动.
被测代码:
- (void)start {
...
self.timer = [NSTimer timerWithTimeInterval:1.0
target:self
selector:@selector(tick:)
userInfo:nil
repeats:YES];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:self.timer forMode:NSDefaultRunLoopMode];
...
}
Run Code Online (Sandbox Code Playgroud)
我想测试的是使用正确的参数创建计时器,并计划在运行循环上运行计时器.
我想到了以下我不满意的选择:
NSTimer被测代码提供模拟.(原因我不喜欢它:无法验证它实际上是否已安排运行,因为定时器是通过运行循环NSTimer启动的,而不是来自某些启动方法.)NSRunLoop并验证addTimer:forMode:被调用.(原因我不喜欢它:我必须在运行循环中提供一个接口?这看起来很古怪.)有人可以提供一些单元测试指导吗?