如何等待动画完成单元测试

时间:2011-08-15 15:12:10

标签: iphone unit-testing animation core-animation ocunit

我正在使用Xcode的OCUnit来编写单元测试,我的测试调用了一个执行动画的方法。 我希望测试方法只在动画完成后继续。

执行动画的方法没有动画委托,我认为它不应该有。

如何在不设置动画委托的情况下等待动画以测试方法结束?

1 个答案:

答案 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

上面只是立即执行动画块,如果也提供了立即完成块。