如何使Xcode 5单元测试尽早失败?

时间:2014-02-11 00:39:46

标签: unit-testing xcode5 kif

我正在Xcode 5中运行SenTestKit单元测试(实际上,它们是与KIF 2的集成测试,但它完全相同)。这些测试需要很长时间才能运行。有没有办法让整个测试套件在第一次测试失败时失败?

2 个答案:

答案 0 :(得分:1)

您可以通过在每个测试用例开始时调用[self raiseAfterFailure]来中止第一个SetTestKit测试失败的测试。但是,这对KIF 2不起作用。

我最后像这样继承了SenTestObserver

@interface TestObserver : SenTestObserver
@end

@implementation TestObserver

+ (void)load {
    [[NSUserDefaults standardUserDefaults] setValue:@"SenTestLog,TestObserver"
                                             forKey:SenTestObserverClassKey];
}

+ (void)testCaseDidFail:(NSNotification *)notification {
    // Fail fast
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        exit(1);
    });
}

@end

已编辑以添加dispatch_after,以便在终止测试套件之前有时间捕获测试输出。

答案 1 :(得分:0)

您可以简单地使用标志,但在这种情况下,您应该在使用KIF进行测试时仔细查看UI元素。 KIF的一个很好的扩展是一个方法,如果给定的元素存在,它返回true。如果应该,但它没有设置标志。 然后,您可以通过检查标志来启动所有测试用例。 如果您需要有关该方法的帮助,请询问! :)