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