带有动画的 iOS 单元测试

标签 ios xcode unit-testing xctest

为什么使用 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/

相关文章:

objective-c - 可捏网页 View

ios - Alamofire 4 重试器和适配器无法看到更改的 accessToken

ios - 激活/停用自动布局 NSLayoutConstraints

unit-testing - 如何使用 StructureMap 2.5.3 自带的 MoqAutoMocker?

java - 查看单个类的代码覆盖率

ios - 如何使用coremotion计算手机的前后运动

iphone - 如何在方向更改后调整 UIView 的大小(包含的代码似乎不起作用)

xcode - CoreData 位于哪里?

iphone - 关闭子级后,父级 UIViewController 方向不应更改

python - 在 Python 中更改操作系统以进行单元测试