2011-08-15 35 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