Я пытаюсь использовать объявление Swift 2 new @testable
, чтобы вывести мои классы в тестовый объект. Однако я получаю эту ошибку компилятора:
Intervals
- это модуль, содержащий классы, которые я пытаюсь открыть. Как избавиться от этой ошибки?
Я пытаюсь использовать объявление Swift 2 new @testable
, чтобы вывести мои классы в тестовый объект. Однако я получаю эту ошибку компилятора:
Intervals
- это модуль, содержащий классы, которые я пытаюсь открыть. Как избавиться от этой ошибки?
В вашей основной цели вам нужно установить опцию Enable Testability
build. Да.
В соответствии с комментарием by @earnshavian ниже, это должно использоваться только для отладочных сборников в соответствии с примечаниями к выпуску Apple: "Параметр" Включить возможность тестирования "должен использоваться только в вашей конфигурации отладки, поскольку он запрещает оптимизацию, зависящую от не экспортирования внутренние символы из приложения или рамки" https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326
Решение - довольно простые парни. Убедитесь, что вы правильно установили свои флажки под свою схему приложений. ВЫ ДОЛЖНЫ UNCHECK ваши тестовые цели для сборки архива.
В моем случае я использовал настраиваемую конфигурацию сборки для тестирования (называемую 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
сборок.
Для тех из вас, кто испытывает это только после запуска Xcode Profiler: переключите конфигурацию построения профиля в управлении вашей схемой на конфигурацию с включенной тестируемостью, и в большинстве случаев это было бы отладкой:
Возможно, это связано с тем, что ваша главная цель Enable Testability
установлена на NO
. Вы должны установить его в YES
в схеме отладки (которая используется для запуска ваших тестов).
Если вы используете Carthage, эта проблема может быть вызвана импортированием фреймворков с помощью @testable
, поскольку они построены с помощью схемы выпуска.
В большинстве случаев неправильная практика импорта фреймворков с этим префиксом, поэтому вы можете избежать этого.
Если вы не можете, вы должны Enable Testability
в схеме выпуска фреймворков. https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326
Я начал получать эту ошибку при запуске тестов с использованием Bitrise.
В отличие от других пользователей, это не на основе Target
или Schema
, это составляет на основе Configuration
.
Выберите Target
→ вкладка Build Settings
→ найдите testability
→ включите его в конфигурации, которую вы используете.
Обратите внимание, что Apple рекомендует включить это в конфигурации, которую вы используете для отладки, а не для AppStore.
Выше решение прекрасно, если вы используете pods/Carthage.
Но если вы используете фреймворки от самого iOS ', например. Контакты ', вам нужно добавить путь к этим фреймворкам в "Пути поиска библиотеки" вашего основного целевого проекта.
Если вы пытаетесь протестировать фреймворк:
Перейти к цели тестирования → Фаза сборки → Фаза создания новых файлов копирования → Выбрать рамки → Добавить все рекурсивно используемые рамки
Если случайно у вас есть
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 |configuration| do
configuration.build_settings["ENABLE_TESTABILITY"] = "YES"
end
end
Это не произошло в моих проектах до Xcode 8, но после того, как я обновился до Xcode 8, это сделало меня озадаченным.
Отправленные ответы не помогли решить мои проблемы. Для меня я просто бросил эти тесты, поскольку это не нужно. Поэтому снимите флажки с тестовых кнопок: