XCTest не закончил в Xcode 5
У меня есть один тестовый класс и один тестовый пример. Когда я запускаю свой unit test, Xcode сообщает мне, что все мои тесты прошли, но у меня есть предупреждение о том, что мои тесты не закончились.
Нужно ли мне что-то делать с XCTest, чтобы сообщить ему, что я закончил с конкретным тестовым случаем?
Обновление:
Это может быть проблема времени/ошибка. Я установил [NSThread sleepForTimeInterval:.1]; в методе tearDown, и теперь он работает каждый раз. Xcode также закончил тесты штрафом периодически самостоятельно без сна.
Обновление 2:
Похоже на некоторую ошибку с некорректным Xcode, я добавил третий тест, который просто выполняет проверку форматирования текста, и предупреждение появляется снова.
![Test Failure Image]()
Ответы
Ответ 1
Я никогда не получал предупреждение, которое вы упомянули, но после преобразования в Xcode 5 XCTest (с помощью меню рефакторинга и смены рамки) мои тесты выполнялись вечно (для некоторого значения навсегда...), но никогда не начали выполнять (setUp и методы тестирования вообще не вызываются).
Я изменил тестовую цель, "Настроить параметры" > "Упаковка" > "Расширение Wrapper" с "octest" на "xctest", и проблема была немедленно решена.
![Wrapper Extension setting existing and new value]()
Чтобы ответить на ваш вопрос, тест должен завершиться, как только закончится его выполнение, и завершится его метод tearDown. Тест без кода пройдет успешно. Попробуйте установить контрольную точку или лог-сообщение внутри вашего теста, чтобы убедиться, что он действительно вызван и убедитесь, что ваш tearDown не висит по какой-либо причине.
Ответ 2
Ваше обновление ссылается на сон в потоке tearDown, решая его, если вы делаете что-то вроде сетевой или фоновой обработки, удобной трюкой является установка флага и его очистка (и выдача ошибки, если нет). Очистите флаг в своем ответе.
Последовательность разгона и теста устанавливает таймер в течение двух секунд (ну, он ждет 250 мс восемь раз).
- (void)tearDown {
[super tearDown];
while (isProcessing > 0) {
LogTrace(@"Polling...");
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:.25]];
isProcessing--;
if(isProcessing == 0) {
XCTFail(@"Network loop expired while awaiting response");
}
}
LogTrace(@"Finished Polling");
}
-(void)testARandomRequest {
isProcessing = 8;
NSDictionary *parameters = @{@"code": @"54321"};
[manager doAFNetworkPatch:@"restApi/1" andParameters:parameters andPredicate:^(NSURLResponse *response, NSError *error) {
NSLog(@"Response received");
isProcessing = 0;
}];
}
Ответ 3
У меня была такая же проблема, как и при попытке запустить на iOS6-симуляторе.
Убедитесь, что вы проводите тесты на симуляторе iOS7, а не на iOS6. XCTest доступен только с iOS7.