Я запускаю модульные тесты SenTestKit в Xcode 5 (на самом деле это интеграционные тесты с KIF 2, но это одно и то же). Эти тесты занимают много времени. Есть ли способ, чтобы весь набор тестов провалился при первом провале теста?
Как привести к преждевременному сбою модульных тестов Xcode 5?
Ответы (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
, чтобы было время зафиксировать выходные данные теста перед завершением набора тестов.
Вы можете просто использовать флаг, но в этом случае вы должны внимательно следить за элементами пользовательского интерфейса при тестировании с помощью KIF. Хорошим расширением KIF является метод, возвращающий true, если данный элемент существует. Если должен, но не устанавливает флаг. Тогда можно просто запускать все тестовые случаи с проверкой флага. Если вам нужна помощь с этим методом, просто спросите! :)