为什么使用 Xcode 5.0 和 XCTesting 可以通过以下单元测试?我的意思是,我明白底线:1 == 0 不被评估。但是为什么不评价呢?我怎样才能让这个执行失败?
- (void)testAnimationResult
{
[UIView animateWithDuration:1.5 animations:^{
// Some animation
} completion:^(BOOL finished) {
XCTAssertTrue(1 == 0, @"Error: 1 does not equal 0, of course!");
}];
}
最佳答案
从技术上讲,这将起作用。但当然,测试会坐下来运行 2 秒。如果您有几千个测试,这可以加起来。
比较有效的是把一个类中的UIView静态方法stub掉,让它立即生效。然后将该文件包含在您的测试目标(但不是您的应用程序目标)中,以便该类别仅编译到您的测试中。我们使用:
#import "UIView+Spec.h"
@implementation UIView (Spec)
#pragma mark - Animation
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion {
if (animations) {
animations();
}
if (completion) {
completion(YES);
}
}
@end
上面的代码只是立即执行动画 block ,如果提供了完成 block ,也会立即执行。
关于带有动画的 iOS 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19668894/