Это заняло у меня довольно много времени, но мне, наконец, удалось заставить его работать на мой проект.
Для создания «логических» тестов я следовал рекомендациям Apple по созданию логических тестов .
Это прекрасно работает, когда вы понимаете, что логические тесты запускаются во время сборки.
Чтобы иметь возможность отлаживать эти тесты, необходимо создать собственный исполняемый файл, который будет вызывать эти тесты. Статья Шона Мицели в блоге Grokking Cocoa содержит всю информацию для этого. Однако следование этому не принесло немедленного успеха и потребовало некоторой настройки.
Я расскажу об основных шагах, представленных в уроке Шона, предоставив некоторые наброски "для чайников", на которые у меня ушло некоторое время, чтобы выяснить:
- Настройка цели, которая содержит модульные тесты, но НЕ запускает их
- Настройка исполняемого файла otest для запуска тестов
- Настройте переменные среды otest, чтобы otest мог найти ваши модульные тесты
Шаг 1 - Настройка цели
- Дублируйте свою цель для модульных тестов, расположенную под целями проекта Это также создаст дубликат вашего продукта модульных тестов (файл .octest). На рисунке ниже «UnitTest» является исходной целью.
- Переименуйте и объект модульных тестов, и продукт модульных тестов (файл .octest) в одно и то же имя. На рисунке ниже "UnitTestsDebug" является целью дублирования.
- Удалить фазу RunScript новой цели
Имя обоих может быть любым, но я бы избегал пробелов.
Шаг 2 - Настройка otest
Самым важным моментом здесь является получение правильного otest, то есть для вашей текущей iOS, а не для версии Mac по умолчанию. Это хорошо описано в уроке Шона. Вот еще несколько деталей, которые помогли мне все исправить:
- Перейти проект-> Новый пользовательский исполняемый файл. Откроется окно с предложением ввести имя исполняемого файла и путь к исполняемому файлу.
- Введите имя, которое вы хотите.
- Скопируйте и вставьте путь к вашему исполняемому файлу iOS otest. В моем случае это был /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/Developer/usr/bin/otest
- Нажмите ввод. Это приведет вас к странице конфигурации вашего исполняемого файла.
- Единственное, что нужно изменить на этом этапе, это выбрать «Тип пути: относительно текущего SDK». Не вводите путь, это было сделано на шаге 3.
Шаг 3 - Настройка аргументов otest и переменных окружения
Спорные аргументы просты в настройке ... Но это оказалось моей самой большой проблемой. Сначала я назвал свою цель логического теста «Отладка LogicTests». С этим именем и «LogicTests Debug.octest» (с кавычками) в качестве аргумента для otest у меня продолжалось otest, заканчивающееся кодом завершения 1 и НИКОГДА не останавливаясь в моем коде ...
Решение : в имени цели нет пробела!
Аргументы для otest:
- -SenTest Self (или Все или имя теста - наберите man otest в терминале, чтобы получить список)
- {LogicTestsDebug} .octest - где {LogicTestsDebug} необходимо заменить именем пакета логического теста.
Вот список переменных среды для копирования / вставки:
- DYLD_ROOT_PATH: $ SDKROOT
- DYLD_FRAMEWORK_PATH: "$ {BUILD_PRODUCTS_DIR}: $ {SDK_ROOT}: $ {DYLD_FRAMEWORK_PATH}"
- IPHONE_SIMULATOR_ROOT: $ SDKROOT
- CFFIXED_USER_HOME: "$ {HOME} / Библиотека / Поддержка приложений / iPhone Simulator / Пользователь"
- DYLD_LIBRARY_PATH: $ {BUILD_PRODUCTS_DIR}: $ {DYLD_LIBRARY_PATH}
- DYLD_NEW_LOCAL_SHARED_REGIONS: ДА
- DYLD_NO_FIX_PREBINDING: ДА
Обратите внимание, что я также пробовал DYLD_FORCE_FLAT_NAMESPACE, но это просто привело к аварийному завершению.
Шаг 4 - Запуск исполняемого файла otest
Чтобы запустить исполняемый файл otest и начать отладку тестов, вам необходимо:
- Установите активную цель для своей цели модульного теста (LogicTestsDebug в моем случае)
- Установите ваш активный исполняемый файл на ваш otest исполняемый файл
Вы можете создавать и запускать свой исполняемый файл и отлаживать свои тесты с точками останова.
В качестве примечания, если у вас возникают проблемы с запуском вашего otest исполняемого файла, это может быть связано с:
- Неправильный путь. Сначала у меня было много проблем, потому что я указывал на тест Mac. Я продолжал падать при запуске с кодом завершения 6.
- Неправильные аргументы. Пока я не удалил пробел из имени пакета (.octest), у меня продолжал происходить аварийное завершение с кодом выхода 1.
- Неправильный путь в переменных среды. [Учебник Шона] [8] содержит множество дополнительных вопросов, дающих некоторое представление о том, что пробовали другие люди. Набор, который у меня сейчас есть, кажется, работает, поэтому я предлагаю вам начать с этого.
Вы можете получить какое-то сообщение в консоли, которое может заставить вас думать, что что-то не так с вашими переменными среды. Вы можете заметить сообщение относительно CFPreferences. Это сообщение не препятствует правильному выполнению тестов, поэтому не сосредотачивайтесь на нем, если у вас есть проблемы с запуском otest.
В последний раз, когда все заработает, вы сможете остановиться на контрольных точках в своих тестах.
И последнее ...
Я читал во многих блогах, что основным ограничением встроенного XCode SenTestKit является то, что тесты нельзя запускать при создании приложения. Ну, как оказалось, на самом деле это довольно легко управлять. Вам просто нужно добавить свой пакет тестов логики в качестве зависимости от вашего проекта приложения. Это обеспечит сборку пакета логических тестов, т. Е. Все тесты будут выполнены до сборки приложения.
Для этого вы можете перетащить пакет логических тестов на цель приложения.