Ошибка компоновщика модуля тестирования Xcode 4 - PullRequest
18 голосов
/ 07 июня 2011

ПРИМЕЧАНИЕ. «Использовать GHUnit» не является приемлемым ответом на этот вопрос. Я знаю, большинство думают, что GHUnit лучше, чем XCode4 OCUnit, но я не об этом. Я оцениваю это отдельно.

У меня есть проект Xcode, который я создал в Xcode4 с нуля, с флажком «Включить модульные тесты», установленным во время создания. Я также включил некоторые библиотеки, которые я разработал в предыдущем проекте. Они были добавлены в проект через диалоговое окно «Добавить файлы в x ...» и добавлены только к цели приложения (не цели тестирования). Они отлично работают при запуске приложения, поэтому я думаю, что они настроены правильно. У меня также есть несколько различных классов, написанных для этого проекта.

Мои тестовые файлы настроены стандартным способом с именами [AppName] Tests.h и .m.
Код для заголовка:
#import < SenTestingKit/SenTestingKit.h >

@interface [AppName]Tests : SenTestCase {
@private
}
@end

Код для реализации:
#import "[AppName]Tests.h"

@implementation [AppName]Tests

- (void)setUp
{
    [super setUp];
    // Set-up code here.
}

- (void)tearDown
{
    // Tear-down code here.
    [super tearDown];
}  
// Test methods go here
@end

Что является просто основным скелетом. Он отлично работает в моем другом проекте, и в этом проекте, если я не импортирую другие файлы. Когда я импортирую другой файл из этого проекта и использую его, я вижу следующую ошибку в журнале вывода Xcode:
The test bundle at /Users/[Me]/Library/Developer/Xcode/DerivedData/[AppName]-dwuuuwcpmdqxqmgxomoniplwhlpb/Build/Products/Debug-iphonesimulator/[AppName]Tests.octest could not be loaded because a link error occurred. It is likely that dyld cannot locate a framework framework or library that the the test bundle was linked against, possibly because the framework or library had an incorrect install path at link time.

Я уже подтвердил, что:

  1. Все используемые мной фреймворки были добавлен в "Link Binary with Библиотеки "для приложения и теста цели.
  2. Тестовая цель настроена правильно построить и что все мои методы испытаний отображаются в Edit Схема ...-> Тест-> Тесты
  3. Каждый выпуск, кроме этого, был решено и нет компилятора ошибки.
  4. Все настройки обсуждались здесь настроены правильно и идентичны в мой другой проект, который тестирует правильно.

Есть мысли о том, что может быть причиной этого?

Ответы [ 9 ]

13 голосов
/ 12 сентября 2012

Мне пришлось установить свойство "Test Host" для цели модульного теста на $(BUNDLE_LOADER).Это решило мою проблему!

7 голосов
/ 02 октября 2012

Я сделал следующее:
http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/

Более подробно рассмотрим Test_Hosts = $ (BUNDLE_LOADER)

Настройка Test_Hosts зафиксирована точно так жевыпуск!

7 голосов
/ 03 марта 2012

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

Я в конце концов простоУстановите новую цель модульного тестирования, выполнив следующие действия: http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/

И теперь все в порядке.

Итак - если у вас странные, необъяснимые ошибки в ссылках, вам может быть лучше просто создать новую цель для модульного тестирования.Только занимает 2 минуты.

4 голосов
/ 07 июня 2011

Когда я получаю ошибки компоновщика при выполнении модульных тестов, проблема решается двумя способами.Первое решение состоит в том, чтобы установить для параметра «Тест после сборки» значение «ДА» и выбрать «Продукт»> «Сборка для»> «Сборка для тестирования» для запуска тестов.Это решение проще в реализации.

Второе решение - добавить файлы реализации приложения в цель модульного тестирования.Откройте инспектор файлов, выбрав «Просмотр»> «Утилиты»> «Инспектор файлов».Выберите файл реализации в навигаторе проекта.Установите флажок рядом с целью модульного теста в инспекторе файлов.

Для приложений iPhone, работающих в симуляторе, убедитесь, что параметр сборки Test Host пуст.Симулятор не поддерживает размещенные в приложении модульные тесты.

1 голос
/ 20 ноября 2012

Наткнулся на эту ошибку при запуске Xcode 4.5.2 - это ноябрь 2012 - ничего из вышеперечисленного не сработало Кажется, что установка загрузчика пакетов и тестового хоста должна заполнить все зависимости от вашего проекта - или запустить тесты в среде вашего приложения или что-то в этом роде, но, к сожалению, у меня не получилось. Что он сделал, так это предотвратил определенные предупреждения Xcode о том, какие файлы / библиотеки отсутствовали.

Что мне помогло, так это добавление новой цели: тест сенсорного модуля какао (убедитесь, что настройки загрузчика комплекта и сборки хоста теста были пусты), наблюдение за ошибками сборки и ручное добавление отсутствующих зависимостей - по одному все исходные файлы из моего проекта, которые были необходимы, а затем рамки. Не очень элегантно, но я был просто счастлив заставить его работать. Не уверен, почему я еще не пробовал эту библиотеку GHUnit.

1 голос
/ 20 января 2012

Однажды у меня была такая же проблема. По какой-то причине один из исходных файлов для моего проекта был также включен для компиляции для цели теста, что приводит к ошибке ссылки.

Убедившись, что скомпилированы только файлы реализации теста, вы сможете устранить эту ошибку. Вы можете проверить это по адресу:

TestTarget -> Этапы сборки -> Исходники компиляции

0 голосов
/ 28 июня 2013

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

Решение:

  1. Выберите небольшой диапазон файлов .m (используйте «Фильтр в навигаторе» (cmd-opt-j) для поиска .m)
  2. Показать инспектор файлов(cmd-opt-1) для просмотра целевого членства файлов
  3. Убедитесь, что соответствующие файлы являются членами вашей цели теста.

Примечание: если флажок цели теста показывает- вместо + или отсутствие отметки означает, что некоторые, но не все, выбранные файлы являются членами цели.

Я пытался делать более умные вещи во время слияния сфайл .xcodeproj project.pbxproj, но я разочаровывался в его непостижимости каждый раз и прибегал к этому методу.

(Еще одно примечание: я выбираю только несколько файлов ввремя по двум причинам:

  • Xcode's pнеудовлетворительная работа инспектора файлов при выборе более 7–10 файлов
  • Некоторые файлы не являются и не должны входить в контрольную цель, и процесс удаления проще, если выбранассортимент маленький)
0 голосов
/ 07 сентября 2012

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

Я портировалприложение от iOS до Mac, сам проект был создан для iOS, поэтому и проект, и основная цель имели iOS на поддерживаемых платформах.Теперь, когда я начал портировать, я создал новую цель для Mac и изменил поддерживаемые платформы на OSX только для этой цели.После этого я создал еще одну цель для модульных тестов, но забыл поменять поддерживаемые платформы с iOS на Mac.Я думаю, вы уже должны знать, в чем заключалась проблема, в основном цель модульных тестов по умолчанию связана с платформой Cocoa, поэтому, поскольку поддерживаемыми платформами для этой цели была только iOS, каркас какао никогда не создавался и не был правильно связан.Изменение поддерживаемых платформ на OSX для цели тестирования устранило проблему.

Я знаю, что это может быть не очень полезно для целей тестирования iOS, но, по крайней мере, перейдите к своей цели тестирования. Ссылка Binary With Libraries и посмотритеесли есть какие-то красные библиотеки.Это дало мне идею, может быть, это также поможет некоторым из вас.

0 голосов
/ 21 июня 2011

Убедитесь, что у цели теста настроена цель приложения как зависимость (Этапы сборки -> Зависимости цели).

...