Проблема с подключением тестового модуля iPhone, не удается найти DevToolsBundleInjection.framework - PullRequest
1 голос
/ 10 февраля 2010

Я пытаюсь настроить модульные тесты приложения для своего приложения iphone. Поэтому я сделал копию цели приложения и цели пакета юнит-тестирования, как описано в документации Apple .

Следуя указаниям Apple, я не смог сослаться на свои классы в модульных тестах, поэтому я связал приложение с пакетом модульных тестов, используя настройку сборки Bundle Loader и установив основную цель для экспорта символов. Это решило ошибки времени компиляции, и оно сработало и выполнило мои тесты сразу после того, как я изменил его. Но после того, как я очистил и собрал заново, я начал получать эту ошибку при попытке запустить на устройстве:

Unable to read symbols for "/Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.1 (7C144)/Symbols/Developer/Library/PrivateFrameworks/DevToolsBundleInjection.framework/DevToolsBundleInjection" (file not found).

Это правда, что файл не существует. Я нашел файл .framework в: /Xcode3.1.4/Library/PrivateFrameworks PrivateFrameworks

и сделал символическую ссылку. Затем, запустив приложение, он сказал, что не может связать файлы приложения:

010-01-25 20:19:22.330 SmokeyTheBear[5808:207] Error loading /private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest/LogicTests:  dlopen(/private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest/LogicTests, 262): Symbol not found: _OBJC_CLASS_$_AppDelegate
  Referenced from: /private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest/LogicTests
  Expected in: /var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/UDorse
 in /private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest/LogicTests
DevToolsBundleInjection: Error loading bundle '/private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest'

Затем я вернулся к запуску обычной цели для приложения, и оно запустило все мои модульные тесты и вышло! Я снова почистил и собрал, а затем нормальная цель побежала нормально. Цель модульного теста все еще не работала.

Ответы [ 2 ]

2 голосов
/ 17 февраля 2010

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

Чтобы получить тестовый пример для доступа к предметному API, вам может понадобиться добавить соответствующие файлы реализации в комплект модульного теста и импортируйте соответствующие файлы заголовков в свой класс модульного теста.Пример проекта, в котором используются модульные тесты, см. В проекте примера кода iPhoneUnitTests .

Я считаю, что настройка модульного тестирования с помощью OCUnit также является неоптимальной.Модульное тестирование просто не является первоклассной практикой в ​​мире Obj-C, по крайней мере из того, что предоставляет Apple.OCTest - это настраиваемая версия SenTestingKit.По сути, он создает библиотеку с расширением .octest, которую исполняет бегун OCTest (otest).Динамическое связывание не поддерживается (лучше сформулировано: разрешено) на iPhone, поэтому вам остается только запускать тесты на своем Mac.

Это простой случай «логических тестов», «прикладные тесты» немного сложнее.То, как работает OCUnit, вызывает все виды боли, особенно при отладке.Вот почему я и многие другие отказались от участия в OCTest и выбрали GTM или GHUnit.Они работают через статическое связывание и включают тестового бегуна в саму цель теста.(Отчасти похоже на «тесты приложений».)

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

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

Набор инструментов Google для iPhoneUnitTesting

UISpec для тестирования GUI-модуля

Учебное пособие о том, как его запустить, и обсуждение различных вариантов, доступных для модульного тестирования iPhone.

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

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