Сбой OCMock во время выполнения - PullRequest
5 голосов
/ 06 марта 2012

Я пытаюсь использовать OCMock впервые в моих тестовых случаях.Это проект Mac, созданный и ориентированный на Lion, в Xcode 4.3.В основном приложении и комплекте тестов включен ARC, и поэтому каждый раз, когда я выполняю тесты, я вижу следующее сообщение в журнале:

GC: forcing GC OFF because OBJC_DISABLE_GC is set

Это нормально, так как яиспользуя ARC, поэтому я не забочусь о GC.Когда я собираю свои модульные тесты, связанные с последней стабильной версией OCMock (2.0.1), сборка не имеет проблем.Во время выполнения, после вышеприведенного оператора log, я получаю следующее:

The test bundle at /Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest could not be loaded because its Objective-C runtime information does not match the runtime information required by the test rig. This is likely because the test rig is being run with Objective-C garbage collection disabled, but the test bundle requires Objective-C garbage collection. To enable Objective-C garbage collection for the test rig, run it in an environment without the OBJC_DISABLE_GC environment variable. 2012-03-06 10:29:32.812 otest[8486:203] *** NSTask: Task create for path '/Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest/Contents/MacOS/___Tests' failed: 22, "Invalid argument". Terminating temporary process.

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

Обновление

Мне удалось воспроизвести это с новым пустым проектом.

  1. Создать новый проект и создать для него модульные тесты с включенным ARC
  2. Очистить настройку Test Hostиз настроек сборки пакета модульных тестов
  3. Ссылка на OCMock framework
  4. Выполните тесты и наблюдайте ту же ошибку, о которой я сообщал выше

Также, когда я включаювыключите ARC и выполните сборку мусора Обязательно , затем clang сообщает об ошибке компоновщика mach-o, поэтому сборка не будет выполнена успешно.Если я удалю ссылку на фреймворк OCMock, он будет работать нормально.Это подтверждает мою первоначальную мысль о том, что проблема кроется не в сборке мусора.

1 Ответ

18 голосов
/ 07 марта 2012

Я нашел ответ после целого дня поиска всего, что мог придумать, в учебнике Hamcrest (, более внимательно читающем учебник OCMock , связанный с OCMock.org , там тоже упоминается ).По какой-то причине фреймворки Hamcrest и OCMock необходимо скопировать в каталог продуктов.Тогда все работает как шарм.

  1. Перейдите в настройки для вашего набора тестов
  2. Перейдите на вкладку Фазы сборки вкладка
  3. Нажмите кнопку Добавить фазу сборки и выбрать Добавить файлы копирования
  4. Установить новые фазы сборки файлов копирования '1024 * Назначение в Каталог продуктов
  5. Перетащите OCMock.framework из контура проекта в список файлов для фазы
  6. Перетащите фазу копирования файлов над Run Script phase

Выполните ваши тесты как обычно

...