Некоторые из моих тестов модульных тестов не заканчиваются в XCode 4.4
Я видел людей, публикующих об этом здесь и в других местах, но я не нашел никакого решения, которое работает. Я использую XCode 4.4 и имею кучу модульных тестов. Я запускал их все раньше в этом проекте, поэтому я знаю, что они пропускают/терпят неудачу, когда они предполагаются, если они действительно выполняются.
У меня около 15 тестовых наборов, и каждый из них содержит 1-7 тестов. По большинству попыток все тестовые комплекты завершались (и передавались), за исключением 1 (FooTests). Он дает предупреждение:
FooTests did not finish
testFoo did not finish
XCode сообщит, что тестирование было успешным, независимо от того, что происходит в незавершенных тестах. Другое дело отметить, иногда это другой тест, который не будет завершен, а иногда несколько комплектов не закончатся. Я не заметил случая, когда все тесты заканчиваются, но, судя по этому, казалось бы, случайному поведению, я считаю, что это возможно.
Итак, это ошибка в XCode? Я не могу придумать другую причину, по которой тесты случайным образом не заканчиваются, а затем заставляют XCode сообщать, что все прошло успешно. Существуют ли какие-либо решения?
Ответы
Ответ 1
Я на XCode 4.5.2. Для приложения unit test, если ваши тестовые комплекты заканчиваются так быстро, что основное приложение неправильно загружено до этого, вы получите предупреждение. Вы можете просто избежать проблемы, добавив спать в конце вашего теста, как показано ниже. Это не происходит для логики unit test.
[NSThread sleepForTimeInterval:1.0];
Ответ 2
У меня была эта проблема с XC4.5DP4.
У меня был тест, который выполняет некоторую работу в цикле и больше ничего не делает, когда он выпадает из цикла, и я получаю ошибку "не закончил".
В попытке доказать завершение теста я добавил это как самую последнюю строку:
NSLog(@"done");
Мало того, что "сделано" печатается на выходе, теперь Xcode сообщает, что тест завершен.
Кажется, это обходной путь... go figure.
Ответ 3
Я использую XCode46-DP3, и я только что решил эту проблему в своих тестах. У меня есть несколько тестов, которые запускают веб-сервер, а затем выполняют HTTP-вызов; в конце теста веб-сервер останавливается. На прошлой неделе у этих тестов появилось предупреждение "не закончилось".
Для меня было достаточно добавить следующий сон в конце этих тестов (именно я добавил его в tearDown):
- (void)tearDown {
[self.httpServer stop];
[NSThread sleepForTimeInterval:1.0];
self.httpServer = nil;
self.urlComposer = nil;
}
Ответ 4
Проблема заключается в том, что ваши тесты слишком быстро заканчиваются для Xcode для получения и анализа сообщений журнала, которые указывают на неудачу или успех. Сон в течение 1 секунды в последнем тестовом случае работал надежно для меня, где 0.0 не делал. Чтобы узнать, какой тестовый пример является последним тестовым примером, проверьте тестовое действие в диалоговом окне "Схема".
Я создал отдельный тестовый пример WorkaroundForTestsFinishingTooFast с помощью одного метода:
- (void)testThatMakesSureWeDontFinishTooFast
{
[NSThread sleepForTimeInterval:1.0];
}
Проблема заключается в том, что по мере добавления дополнительных тестовых примеров вам нужно будет убедиться, что этот тест является последним методом. Это означает удаление и добавление этого класса из тестового действия, поскольку переупорядочение тестовых случаев не разрешено. С другой стороны, вы задерживаете весь тестовый комплект на 1 секунду.
Ответ 5
У меня были те же предупреждения в Log Navigator. Я исправил это для меня.
В моем проекте у меня есть 2 схемы, одна для запуска проекта и одна для модульных тестов.
- Перейти к продукту → Изменить схему...
- Выберите схему UnitTest в схеме выбора схемы
- Выберите "Test" -Icon слева.
- Измените отладчик с LLDB на GDB и нажмите OK
- Тесты должны закончить сейчас. (Для меня это сработало нормально)
Ответ 6
Для меня решение заключалось в том, чтобы сократить результаты регистрации в тех частях приложения, которые тестировали тесты. Я думаю, что xcode не смог разобрать результаты тестов во времени из-за другого вывода, который у меня был в приложении.
Ответ 7
У меня была такая же проблема с XCode 4.6, причина в этом, в моем случае, была несогласованность между схемой и фактическими модульными тестами в тестовых костюмах.
В схеме у меня были проверены некоторые костюмы, но в их .m файле были прокомментированы некоторые модульные тесты.
Чтобы решить проблему: раскомментируйте тест или отмените выбор файла/костюма в схеме, и все снова станет зеленым:)
для таких людей, как я, которые забыли, как достичь схемы, это необходимые шаги:
- щелкните правой кнопкой мыши имя проекта в разделе схемы (справа на кнопку остановки)
- выберите схему редактирования
- выберите тестовую отладку
- щелкните по треугольнику рядом с проектом unit test и рядом с каждым файлом у вас установлен флажок
- снимите флажки с файлами, которые вы разместили unit test в комментариях
надеюсь, что это поможет