2012-08-07 81 views
1

我最近采用了iOS公司应用程序,它充当媒体CMS的客户端。换句话说,Web应用程序管理视频目录,图像幻灯片以及静态/离线HTML文件。 iOS应用程序连接到Web应用程序,并将此内容下载到自身以供脱机使用。单元测试iOS应用程序同步逻辑

热点是iOS和Web应用程序之间的同步逻辑。单元测试这两个项目之间的逻辑是否有任何建议?

回答

1

是的,你必须“欺骗”一些。一种方法是使用NSRunLooprunUntilDate:方法,这是我的方法。

基本上,为了让您的网页代码有机会与网络进行交流,您希望将您的单元测试置于一种忙碌的等待状态,实际上可以让每个人都做一些工作,但是您也希望“ “定期在你的单元测试中查看你的操作是否完成。

这里是我的“走做工作”的方法:

-(BOOL)runLooperDooper:(NSTimeInterval)timeoutInSeconds{ 
    NSDate* giveUpDate = [NSDate dateWithTimeIntervalSinceNow:timeoutInSeconds]; 
    // loop until the operation completes and sets stopRunLoop = TRUE 
    // or until the timeout has expired 
    // stopRunLoop is a instance variable of the UnitTest object... take care to reset at the start or end of each test! 
    while (!stopRunLoop && [giveUpDate timeIntervalSinceNow] > 0) 
    { 
     // run the current run loop for 1.0 second(s) to give the operation code a chance to work 
     NSDate *stopDate = [NSDate dateWithTimeIntervalSinceNow:1.0]; 
     [[NSRunLoop currentRunLoop] runUntilDate:stopDate]; 
    } 

    return stopRunLoop; 
} 

因此,在每个单元测试:

NSTimeInterval testSpecificTimeout = 60; //60 seconds or however long you need... 
    [self runLooperDooper:testSpecificTimeout]; 
    STAssertTrue(stopRunLoop, @"Failed to complete before runloop expired after %f seconds", timeoutInSeconds); 

然后,我还注册了一些事件处理程序为我的网页代码通过将stopRunLoop ivar设置为TRUE来了解其操作何时完成。