Я пытаюсь настроить модульные тесты приложения для своего приложения для 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 ответа
Из приведенных сообщений журнала я предполагаю, что вы пытаетесь настроить «логический тест». (неловко, не так ли?). Ваша проблема в том, что вы пытаетесь связать свой код, который нужно протестировать, когда вместо этого его нужно включить в тестовый пакет. Вот соответствующий раздел manual (выделено мной).
Для тестового примера для доступа к теме API, возможно, вам придется добавить соответствующие файлы реализации для пакет модульного тестирования и импортировать соответствующие заголовочные файлы в ваш класс юнит-тестов. Для примера проект, использующий модульные тесты, см. Пример iPhoneUnitTests -кодовый проект.
Я обнаружил, что настройка модульного тестирования с OCUnit также не оптимальна. Модульное тестирование просто не является первоклассной практикой в мире Obj-C, по крайней мере, из того, что предоставляется Apple. OCTest — это настроенная версия SenTestingKit. По сути, он создает библиотеку с расширением .octest, которую выполняет средство запуска OCTest (otest). Динамическое связывание не поддерживается (лучше сказать: разрешено) на iPhone, поэтому вам остается запускать тесты только на вашем Mac.
Это простой случай «логических тестов», «тесты приложений» немного сложнее. То, как работает OCUnit, вызывает всевозможные боли, особенно при отладке. Вот почему я и многие другие отказались от OCTest и выбрали GTM или GHUnit. Они работают через статическую привязку и включение тест-раннера в сам тест-цель. (Несколько похоже на «прикладные тесты».)
Хотя это не дает прямого ответа на ваш вопрос, я хотел сказать, что пытался следовать вашему маршруту, используя информацию о модульном тестировании Apple, и обнаружил, что это неоптимальный подход TDD, поэтому я решил использовать то, что рекомендовали другие люди:
Набор инструментов Google для iPhoneUnitTesting Kit
UISpec для модульного тестирования графического интерфейса
Учебное пособие о том, как запустить это приложение, и обсуждение о различных вариантах, доступных для модульного тестирования iPhone.
Я думаю, что вариант, предоставляемый Apple, может работать только в режиме симулятора и имеет много других недостатков ... извините, что не ответил на ваш вопрос напрямую, но, возможно, вы могли бы решить проблему с другой точки зрения (например, те, которые я разместил здесь).
Похожие вопросы
Новые вопросы
iphone
НЕ ИСПОЛЬЗУЙТЕ этот тег, если вы не обращаетесь конкретно к iPhone и / или iPod touch от Apple. Для вопросов, не зависящих от оборудования, используйте тег [ios]. Больше тегов, которые нужно рассмотреть, это [xcode] (но только если вопрос касается самой IDE), [swift], [target-c] или [cocoa-touch] (но не [cocoa]). Пожалуйста, воздержитесь от вопросов, касающихся iTunes App Store или iTunes Connect. Если вы используете C #, пометьте [mono].