Как выполнить модульное тестирование расширения приложения на Xcode 6
Кто-нибудь знает, как выполнить модульное тестирование с целью расширения приложения, особенно с целью расширения клавиатуры?
Что я попробовал (в цели модульного теста):
- В кране "Общие" установите его цель в качестве цели расширения вместо приложения контейнера.
- Установите "Bundle Loader" на путь двоичного файла целевого расширения, который выглядит как
$(BUILT_PRODUCTS_DIR)/com.mycompany.keyboard.appex/com.mycompany.keyboard
- Установите "Тестовый хост" в
$(BUNDLE_LOADER)
, - В кране "Этапы сборки" установите для "Целевых зависимостей" как приложение-контейнер, так и расширение.
После того, как все это сделано, я могу построить его успешно, но всегда получаю "Test Failed" с журналом Test target SogouInputTests encountered an error (Test session exited(1). without checking in. If you believe this error represents a bug, please attach the log file at /tmp/TestStatus-UXfvxw.log)
,
Я использую Xcode 6 beta 3.
2 ответа
Я сообщил об ошибке в Apple. И, к сожалению, ответ таков: расширение клавиатуры не поддерживает модульное тестирование. Ответ приходит от Apple:
- В настоящее время не поддерживается запуск модульных тестов внутри расширения приложения.
- Вместо этого, разложите код, который вы хотите протестировать, в среду и протестируйте код там
- Ссылка рамки в ваше расширение
Просто столкнулся с похожими проблемами, пытаясь провести модульное тестирование расширения. Самостоятельно сделал то же самое, что автор попытался с Bundle Loader, указывая на путь.appx, но, конечно, безуспешно. Мне действительно не понравилась идея создания отдельной платформы только для тестирования, поэтому я в итоге добавил тестируемый источник в цель тестирования расширения. Это действительно просто, если у вас не слишком много исходных файлов в вашем расширении:
- Выберите цель тестирования расширения в настройках проекта
- Перейти к этапам сборки
- Развернуть Компиляция источников
- Нажмите +
- Добавьте исходные файлы с вашим тестируемым кодом.
- Сборка для тестирования
Почему это работает:
После того, как вы добавите источники расширений в свою цель тестирования расширений, XCode собирается сделать двойную ссылку на каждый из них и скомпилировать как обычную сборку расширения, так и тестовую сборку, таким образом устраняя проблемы с линковкой.
Есть ли недостатки?
Вам нужно будет вручную синхронизировать список исходных файлов в тестовой цели расширения. Всякий раз, когда вы добавляете / удаляете файлы в цели расширения, вам может потребоваться сделать то же самое в своей цели тестирования.
То, что я сделал, было проще, чем другие предложения (без создания фреймворка, без странных настроек параметров сборки, этапов и т. Д.), - это добавление файла, который я хотел протестировать (из целевого расширения), в Target Membership
от тестовой цели:
Единственным "недостатком" будет то, что ваша тестовая цель также будет включать файлы из вашего расширения (вместо использования @testable import
как с основным приложением), но поскольку вы не отправляете свою тестовую цель, я бы сказал, что недостатка нет:)
Протестировано на Xcode 10.
Примечание. Работает только с кодом Swift, с ObjC из-за BridgingHeader невозможно следовать этому подходу.