"Модуль не скомпилирован для тестирования" при использовании @testable
Я пытаюсь использовать новый Swift 2 @testable
объявление, чтобы выставить мои классы для цели теста. Однако я получаю эту ошибку компилятора:
Intervals
это модуль, который содержит классы, которые я пытаюсь представить. Как мне избавиться от этой ошибки?
12 ответов
В вашей основной цели вам нужно установить Enable Testability
вариант сборки да.
В соответствии с комментарием @earnshavian ниже, это следует использовать только в отладочных сборках согласно примечаниям к выпуску Apple: "Параметр" Включить сборку тестируемости "следует использовать только в конфигурации отладки, поскольку он запрещает оптимизацию, которая зависит от того, чтобы не экспортировать внутренние символы из приложение или фреймворк " https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html
В моем случае я использовал настраиваемую конфигурацию сборки для тестирования (называется Test
) а также cocoapods
в качестве менеджера зависимостей
Мне пришлось добавить следующие строки в конце моего Podfile
включить тестируемость
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if config.name == 'Test'
config.build_settings['ENABLE_TESTABILITY'] = 'YES'
end
end
end
end
По умолчанию cocoapods
наборы ENABLE_TESTABILITY
в YES
только для Debug
строит
Решение довольно простое, ребята. Убедитесь, что вы правильно установили свои флажки в соответствии со схемой приложения. Вы ДОЛЖНЫ ОТКЛЮЧИТЬ свои тестовые цели для Archive Build.
Я начал получать эту ошибку при запуске тестов с помощью Bitrise.
В отличие от других пользователей, это не заTarget
базис, или за Schema
основа, она является вConfiguration
основание. ВыбратьTarget
-> Build Settings
вкладка -> искать testability
-> Включите его в конфигурации, которую вы используете.
Обратите внимание, что Apple рекомендует включать это в конфигурации, которую вы используете для отладки, а не в AppStore.
Для тех из вас, кто испытывает это только при запуске Xcode Profiler: переключите конфигурацию построения профиля в управлении вашей схемой на конфигурацию с включенной тестируемостью, и в большинстве случаев это было бы отладкой:
Это, вероятно, потому что ваша главная цель Enable Testability
установлен в NO
, Вы должны установить его на YES
в схеме отладки (которая используется для запуска ваших тестов).
Если вы используете Carthage, эта проблема может быть вызвана импортом фреймворков с @testable
потому что они построены по схеме выпуска.
В большинстве случаев импортировать фреймворки с этим префиксом плохая практика, поэтому вы можете избежать этого. Если вы не можете, вы должны Enable Testability
в схеме выпуска фреймворков. https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html
Если случайно у вас есть
install! 'cocoapods',
generate_multiple_pod_projects: true,
incremental_installation: true
Тогда это способ сделать это.
# generated_projects only returns results if the we run "pod install --clean-install"
# or install a pod for the first time
installer.generated_projects.each do |project|
project.build_configurations.each do |configuration|
configuration.build_settings["ENABLE_TESTABILITY"] = "YES"
end
end
Я новичок, и я просто не могу вспомнить, где все настройки и параметры в Xcode. Поэтому я всегда расстраиваюсь, когда вижу «вы можете установить xxx на yyy ...» в ответах на такого рода вопросы. Где эти xxx в Xcode? и что это за ууу? Нам нужна карта, показывающая, как мы делаем дела, а не другая подсказка, вроде ххх. Кажется, мы Николас Кейдж из «Сокровища нации»!
Спасибо за все подсказки здесь, очень много! Вы действительно помогаете мне. Но у меня есть конкретный ответ здесь (который на самом деле от вас):
- Выберите основную цель вашего проекта
- Перейдите на вкладку «Настройки сборки».
- Включите опцию «Все»
- Найдите раздел «Параметры сборки».
- Установите для параметра «Включить возможность тестирования» значение «Да».
- Подождите несколько минут или перезапустите Xcode (тогда ошибка исчезла)
Я получил это, когда мой новый файл Tests.swift принадлежал неправильной цели.
Если вы пытаетесь протестировать фреймворк:
Перейти к цели тестирования -> Фаза сборки -> Фаза создания новых файлов копирования -> Выбрать рамки -> Добавить все рекурсивно используемые рамки
Это не происходило в моих проектах до Xcode 8, но после того, как я обновился до Xcode 8, это озадачило меня.
Ответы, опубликованные здесь, не помогли решить мои проблемы. Для меня я просто отбросил эти тесты, так как он не нужен. Поэтому снимите флажки с тестовых кнопок: