Ошибка связывания для модульного тестирования с XCode 4? - PullRequest
23 голосов
/ 24 июня 2011

Я хочу написать несколько тестов логики для классов в моем приложении XCode.В Xcode 4 я щелкнул по имени проекта в Навигаторе проекта, а снизу нажал «Добавить цель».Я выбрал «Пакет тестирования Cocoa Touch Unit» в разделе «Другое», присвоил новой цели «название продукта» «тесты» и закончил.

Поскольку класс, который я хочу протестировать, скомпилирован как часть моей существующей цели приложения, для моей новой цели «тесты» я немедленно перехожу на вкладку «Фазы сборки» и добавляю свою существующую цель приложения в качестве единственной зависимости цели.

Затем я перехожу к созданному файлу tests.m, импортирую класс, который хочу протестировать (ниже его ReleasePlanManager, и вызываю один из его методов. Но компоновщик завершается ошибкой, например:

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_ReleasePlanManager", referenced from:
      objc-class-ref in tests.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

Так что класс не может быть найден, хотя (насколько я понимаю) добавления цели приложения (частью которой она является) должно быть достаточно?

Любая помощь будет принята с благодарностью. Спасибо!

1 Ответ

33 голосов
/ 03 сентября 2011

Вашему тестовому пакету требуются дополнительные настройки:

  • Установите Bundle Loader на $(BUILT_PRODUCTS_DIR)/AppName.app/AppName (замена AppName в обоих местах именем вашего приложения)
  • Set Тестовый хост до $(BUNDLE_LOADER)

(Если вы создаете проект с нуля и включаете модульные тесты, они настраиваются для вас. Но если вы добавляете пакет модульных тестов всуществующий проект, это не так.)

...