Как выполнить модульное тестирование расширения приложения на 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, но, конечно, безуспешно. Мне действительно не понравилась идея создания отдельной платформы только для тестирования, поэтому я в итоге добавил тестируемый источник в цель тестирования расширения. Это действительно просто, если у вас не слишком много исходных файлов в вашем расширении:

  1. Выберите цель тестирования расширения в настройках проекта
  2. Перейти к этапам сборки
  3. Развернуть Компиляция источников
  4. Нажмите +
  5. Добавьте исходные файлы с вашим тестируемым кодом.
  6. Сборка для тестирования

Почему это работает:

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

Есть ли недостатки?

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

То, что я сделал, было проще, чем другие предложения (без создания фреймворка, без странных настроек параметров сборки, этапов и т. Д.), - это добавление файла, который я хотел протестировать (из целевого расширения), в Target Membershipот тестовой цели:

Единственным "недостатком" будет то, что ваша тестовая цель также будет включать файлы из вашего расширения (вместо использования @testable import как с основным приложением), но поскольку вы не отправляете свою тестовую цель, я бы сказал, что недостатка нет:)

Протестировано на Xcode 10.

Примечание. Работает только с кодом Swift, с ObjC из-за BridgingHeader невозможно следовать этому подходу.

Другие вопросы по тегам