"Модуль не був складений для тестування" під час використання @testable


146

Я намагаюся використовувати нову @testableдекларацію Swift 2, щоб виставити свої класи тестовій цілі. Однак я отримую цю помилку компілятора:

введіть тут опис зображення

Intervals- це модуль, який містить класи, які я намагаюся викрити. Як я можу позбутися цієї помилки?

Відповіді:


238

У своїй головній цілі потрібно встановити параметр Enable Testabilityзбірки на Так.

Згідно з коментарем @earnshavian, наведеним нижче, це слід застосовувати лише для налагоджень на налагодженнях відповідно до приміток випуску яблук: "Налаштування увімкнення збірки Testability слід використовувати лише у вашій конфігурації налагодження, оскільки вона забороняє оптимізації, які залежать від експорту внутрішніх символів з додаток або рамки " https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326


Привіт, я отримую ту ж помилку, але не бачу опції включення перевірки і використовую xcode 7. Будь-яка ідея, що мені робити?
користувач1601259

2
@ user1601259 - Ви можете знайти варіант, вибравши проект верхнього рівня, перейшовши до Налаштування збірки та переглянувши під заголовком Параметри збірки.
hgwhittle

@hgwhittle - Коли я вибираю проект верхнього рівня, все, що я бачу в параметрах збірки, це "формат інформації про налагодження" та "перевірка продукту збірки". Коли я вибираю ціль у параметрах збірки, я бачу "вбудований вміст містить швидкий код". Це воно. Під час пошуку в налаштуваннях збірки я не можу його знайти. Це через xcode 7?
користувач1601259

1
Можливо, ви вибрали "Основні" у своїх "Налаштуваннях побудови". Якщо ви виберете "Усі" з лівого боку, ви побачите "Увімкнути заповітність"
масив

1
Як саме це повинно працювати для @testableверсій версій , де працюватимуть тести (так потрібно ), але потрібно подати їх у App Store? Якщо Enable Testabilityтільки для побудови налагодження, який шлях до цього? Чи потрібно витягувати тестовий код для випуску?
timgcarlson

15

У моєму випадку я використовував власну конфігурацію збірки для тестування (викликається 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зборки



8

Для тих із вас, хто відчуває це лише після запуску Xcode Profiler: переключіть конфігурацію збірки профілю в вашій схемі управління на ту, у якій включено перевірку, і це буде налагодження в більшості випадків:

введіть тут опис зображення


4

Це, мабуть, тому, що ваша головна ціль 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


2
Як я можу уникати імпорту рамок за допомогою @testable? Яка тут хороша практика?
Джонатан Кабрера

3

Я почав отримувати цю помилку під час запуску тестів за допомогою Bitrise.

В відміну від інших користувачів , каже, це НЕ на Targetоснові, або на Schemaоснові, є на Configurationоснові. Виберіть Target-> Build Settingsвкладку -> шукайте testability-> Увімкніть її в конфігурації, яку ви використовуєте .

Зауважте, що Apple рекомендує включити це в конфігурації, яку ви використовуєте для налагодження, а не для AppStore.


0

Вищевказане рішення добре, якщо ви використовуєте стручки / Карфаген. Але якщо ви використовуєте фреймворки із самого iOS «наприклад, контакти», вам потрібно додати шлях до цих фреймворків у розділі «Шляхи пошуку бібліотеки» для вашої основної цілі проекту. введіть тут опис зображення


0

Якщо ви намагаєтеся перевірити фреймворк:

Перейдіть до тестової цілі -> Фаза збірки -> Створення нової фази файлів копіювання -> Вибір фреймів -> Додати всі рекурсивно використовувані рамки


0

Якщо випадково у вас є

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

-3

Це не траплялося в моїх проектах до Xcode 8, але після того, як я перейшов до Xcode 8, це здивувало мене.

Відповіді, розміщені тут, не вирішили моїх проблем. Для мене я просто скинув ці тести, оскільки це не потрібно. Тому зніміть прапорці кнопок тесту:

введіть тут опис зображення І ось помилка вийшла.


1
Якщо вам не потрібні тести, можливо, краще буде видалити тестові цілі зі свого проекту, а не видаляти їх з усіх збірок.
Джонатан Кабрера
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.