2011-08-15 31 views
2

我正在使用Xcode的OCUnit編寫單元測試,而我的測試調用了執行動畫的方法。 我希望測試方法只在動畫完成後才能繼續。如何等待動畫完成單元測試

執行動畫的方法沒有動畫委託,我不認爲它應該有。

我該如何等待動畫在測試方法中結束,而無需設置動畫委託?

+0

這聽起來不像你在完成任務後完成任何事情,因爲你沒有委託,所以爲什麼要等待它完成? –

+0

這聽起來像是一個模擬對象的好地方。 –

回答

6

你不想實際等待動畫;那需要花費時間來運行動畫。如果你有幾千個測試,這可以加起來。

更有效的方法是模擬UIView類的靜態方法,使其立即生效。然後將該文件包含在測試目標中(但不包括您的應用程序目標),以便僅將類別編譯到您的測試中。我們使用:

#import "UIView+SpecFlywheel.h" 

@implementation UIView (SpecFlywheel) 

#pragma mark - Animation 
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion { 
    if (animations) 
     animations(); 
    if (completion) 
     completion(YES); 
} 

@end 

上面只是簡單地執行動畫塊,如果提供它也立即執行完成塊。

+0

很高興幫助! – tooluser