Связывание ошибок при настройке GTM для проведения модульных тестов iPhone - PullRequest
0 голосов
/ 20 февраля 2010

Мой коллега и я уже несколько недель боремся с юнит-тестами. Мы пытались настроить SenTest, GTM и другие фреймворки, но мы никогда не сможем преодолеть грубый шар ошибок компоновки.

Вот где я сейчас с GTM. Буду признателен за любые рекомендации.

Помимо помощи в SO, если у вас есть опыт с этим, я бы с радостью заплатил консультанту. Пожалуйста, напишите мне на andrew@gaiagps.com, если вы думаете, что можете помочь мне с этим.

  1. Я следовал инструкциям здесь: http://code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting. Я обнаружил, что мне нужно добавить файл "GTMObjC2Runtime.h" в проект. После этого я смог получить ожидаемый вывод консоли после установки фреймворка: «Выполнено 0 тестов с 0 ошибками (0 неожиданными) за 0,030 (0,030) секунд»

  2. Затем я отправился написать контрольный пример для одного из моих классов. Я создал WebAPITest.h. Я создал простой тест, который работал нормально. Я только что подтвердил 1 == 1.

  3. Затем я решил написать тест для моего AppDelegate.h. Итак, я добавил #import "AppDelegate.h" в WebAPITest.h и получил 8 ошибок компоновки. Мой проект использует FBConnect, и компилятор жалуется, что не может найти файлы FBConnect. Для решения этой проблемы я добавил путь поиска заголовка FBConnect в конфигурацию сборки объекта Test, и ошибки компоновки исчезли.

  4. Теперь я в тупике. Когда я пытаюсь ссылаться на AppDelegate в реализации, я получаю следующие ошибки компоновки:

    Построение цели «fooTest» проекта «foo» с конфигурацией «Debug» - (2 ошибки)

    неопределенные символы: ".objc_class_name_AppDelegate", на который ссылаются из: литерал-указатель @__ OBJC @__ cls_refs @ AppDelegate в WebAPITest.o ld: символ (ы) не найден collect2: ld вернул 1 статус выхода

  5. Итак, я попытался добавить AppDelegate к цели теста, но потом начал хотеть все зависимости для AppDelegate тоже, и я думаю, я не должен добавлять десятки файлов в модульный тест цель.

Есть идеи, что мне делать дальше?

1 Ответ

0 голосов
/ 20 февраля 2010

Вашему тестовому пакету нужен доступ к скомпилированному классу, который вы пытаетесь протестировать. Это ваше решение - либо добавить его непосредственно к цели (и да, со всеми его зависимостями), либо связать с библиотекой, реализующей класс, либо настроить тестовый пакет так, чтобы он загружался хост-приложением. у которого есть реализация класса.

Эта ссылка может быть полезна для вас:

http://developer.apple.com/iphone/library/documentation/Xcode/Conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html#//apple_ref/doc/uid/TP40007959-CH20-SW3

А также из документации по тестированию основного устройства в Apple:

http://developer.apple.com/mac/library/DOCUMENTATION/DeveloperTools/Conceptual/UnitTesting/1-Articles/CreatingTests.html#//apple_ref/doc/uid/TP40002171

Найдите такие термины, как «Тестовый хост» и «Bundle Loader».

Этот материал не очень прост для понимания, но документация в конечном итоге прояснит все, если вы прогуляетесь и пашете его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...