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

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

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

FooTests did not finish
    testFoo did not finish

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

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

7 ответов

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

 [NSThread sleepForTimeInterval:1.0];

Я использую XCode46-DP3, и я только что решил эту проблему в своих тестах. У меня есть несколько тестов, которые запускают веб-сервер и затем выполняют http-вызов к нему; в конце теста веб-сервер останавливается. На прошлой неделе эти тесты начали получать предупреждение "не закончено". Для меня было достаточно добавить следующий сон в конце этих тестов (именно я добавил его в tearDown):

- (void)tearDown {
  [self.httpServer stop];
  [NSThread sleepForTimeInterval:1.0];
  self.httpServer = nil;
  self.urlComposer = nil;
}

У меня только что была эта проблема с XC4.5DP4.

У меня был тест, который выполняет некоторую работу в цикле и больше ничего не делает, когда он выпадает из цикла, и я получаю ошибку "не завершено".

В попытке доказать, что тестирование заканчивается, я добавил это в качестве самой последней строки:

NSLog(@"done");

Мало того, что "готово" печатается на выходе - теперь XCode сообщает, что тест завершен.

Кажется, это обходной путь... пойди разберись.

Проблема кажется, что ваши тесты заканчиваются слишком быстро для XCode, чтобы получить и проанализировать сообщения журнала, которые указывают на сбой или успех. Сон в течение 1 секунды в последнем прогоне тестов работал для меня надежно, а 0.0 - нет. Чтобы увидеть, какой тестовый набор является последним, проверьте действие теста в диалоговом окне Схема.

Я создал отдельный тестовый пример WorkaroundForTestsFinishingTooFast с помощью одного метода:

- (void)testThatMakesSureWeDontFinishTooFast
{
    [NSThread sleepForTimeInterval:1.0];
}

Проблема заключается в том, что по мере добавления большего количества тестовых случаев вы должны будете убедиться, что этот тест является последним выполненным методом. Это означает, что удаление и добавление этого класса из действия "Тест" не допускается, так как изменение порядка тестов не допускается. С другой стороны, вы задерживаете весь свой тестовый пакет только на 1 секунду.

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

У меня были те же предупреждения в журнале навигатора. Я исправил это для меня.

В моем проекте у меня есть 2 схемы, одна для запуска проекта и одна для модульных тестов.

  1. Перейти к продукту -> Редактировать схему...
  2. Выберите схему UnitTest в окне выбора схемы.
  3. Выберите "Test"-Icon слева
  4. Измените отладчик с LLDB на GDB и нажмите ОК
  5. Тесты должны закончиться сейчас. (У меня все работало нормально)

У меня была та же проблема при работе с XCode 4.6, причиной которой, в моем случае, было несоответствие между схемой и фактическими модульными тестами в тестовых наборах. В схеме я проверил некоторые костюмы, но в их файле.m были прокомментированы некоторые юнит-тесты.

Для решения проблемы: либо откомментируйте тест, либо отмените выбор файла / костюма в схеме, и все снова станет зеленым:)

для таких людей, как я, которые забыли, как достичь схемы, это необходимые шаги:

  1. щелкните правой кнопкой мыши по названию проекта в разделе схемы (справа от кнопки остановки)
  2. выбрать схему редактирования
  3. выбрать тестовую отладку
  4. нажмите на треугольник рядом с проектом модульного теста и рядом с каждым файлом у вас есть флажок
  5. снимите отметки с файлов, которые вы поместили в комментарии

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

Другие вопросы по тегам