Подтвердить что ты не робот

Некоторые из моих тестов модульных тестов не заканчиваются в XCode 4.4

Я видел людей, публикующих об этом здесь и в других местах, но я не нашел никакого решения, которое работает. Я использую XCode 4.4 и имею кучу модульных тестов. Я запускал их все раньше в этом проекте, поэтому я знаю, что они пропускают/терпят неудачу, когда они предполагаются, если они действительно выполняются.

У меня около 15 тестовых наборов, и каждый из них содержит 1-7 тестов. По большинству попыток все тестовые комплекты завершались (и передавались), за исключением 1 (FooTests). Он дает предупреждение:

FooTests did not finish
    testFoo did not finish

XCode сообщит, что тестирование было успешным, независимо от того, что происходит в незавершенных тестах. Другое дело отметить, иногда это другой тест, который не будет завершен, а иногда несколько комплектов не закончатся. Я не заметил случая, когда все тесты заканчиваются, но, судя по этому, казалось бы, случайному поведению, я считаю, что это возможно.

Итак, это ошибка в XCode? Я не могу придумать другую причину, по которой тесты случайным образом не заканчиваются, а затем заставляют XCode сообщать, что все прошло успешно. Существуют ли какие-либо решения?

4b9b3361

Ответ 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 в комментариях

надеюсь, что это поможет