Как привести к преждевременному сбою модульных тестов Xcode 5?

Я запускаю модульные тесты SenTestKit в Xcode 5 (на самом деле это интеграционные тесты с KIF 2, но это одно и то же). Эти тесты занимают много времени. Есть ли способ, чтобы весь набор тестов провалился при первом провале теста?


person Hilton Campbell    schedule 11.02.2014    source источник


Ответы (2)


Вы можете прервать тестирование при первом сбое теста SetTestKit, вызвав [self raiseAfterFailure] в начале каждого тестового примера. Однако это не работает для 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, чтобы было время зафиксировать выходные данные теста перед завершением набора тестов.

person Hilton Campbell    schedule 26.02.2014

Вы можете просто использовать флаг, но в этом случае вы должны внимательно следить за элементами пользовательского интерфейса при тестировании с помощью KIF. Хорошим расширением KIF является метод, возвращающий true, если данный элемент существует. Если должен, но не устанавливает флаг. Тогда можно просто запускать все тестовые случаи с проверкой флага. Если вам нужна помощь с этим методом, просто спросите! :)

person kuglisb    schedule 25.02.2014