Недавно я обновился до Xcode 7 beta 5. Я попытался добавить модульный тест в более ранний проект, но я получаю сообщение об ошибке «Нет такого модуля [myModuleName]» в @testable import myModuleName
строке.
Я попытался
- очистка проекта с помощью OptionClean Build Folder
- проверка того, что для «Включить тестируемость» (отладка) было установлено значение «Да» в параметрах сборки
- удаление цели тестирования, а затем повторное добавление пакета тестирования iOS-модуля
Ничто из этого не работало для этого проекта (но я получил тестирование для работы в другом проекте). Кто-нибудь еще имел эту проблему и решил ее?
ios
xcode
unit-testing
xctest
Suragch
источник
источник
Ответы:
Пожалуйста, проверьте имя модуля, с которым вы пытаетесь импортировать
@testable import "ModuleName"
. Имя модуля должно быть одинаковым наTarget->Build Settings-> Product Module Name
источник
space
и_
-
и_
. Один из моих проектов имеет минус-
в названии, но_
вместо этого у модуля есть подчеркивание""
идею, и получилExpected identifier in import declaration
Build Settings
выберите ваш проект (не тест или тест пользовательского интерфейса), а затем найдитеPRODUCT_MODULE_NAME
все, что показывается, есть то, что должно идти после@testable import
Ответ, который работал для меня
Ответ состоял в том, что в моем проекте были ошибки, из-за которых сборка не удалась. (Это была просто ваша стандартная ошибка в коде каждый день.) После того, как я исправил ошибки и сделал еще одну очистку и сборку, все заработало.
Обратите внимание, что эти ошибки не появлялись сначала. Чтобы заставить их появляться:
Если есть другие ошибки, они должны появиться сейчас. Исправьте их и затем раскомментируйте код тестового файла. Ошибка "Нет такого модуля" исчезла для меня.
Если это не решит проблему для других людей, вы также можете попробовать следующее:
Очистите папку сборки
Откройте меню «Продукт», удерживайте его Optionи нажмите «Очистить папку сборки ...»
Убедитесь, что для параметра «Включить тестирование» установлено значение «Да».
В Навигаторе проектов щелкните название вашего проекта. Выберите «Параметры сборки» и прокрутите вниз до «Параметры сборки». Убедитесь, что Включить тестируемость Да (для отладки).
Удалите и повторно добавьте цель тестов
Если вы сделали другие вещи, я думаю, что вам, вероятно, не нужно это делать. Но если вы это сделаете, не забудьте сохранить любые тесты модулей, которые вы уже написали.
Нажмите на название вашего проекта в Project Navigator. Затем выберите цель тестов. Нажмите кнопку со знаком минус (-) внизу, чтобы удалить его.
Затем нажмите кнопку со знаком «плюс» (+) и выберите «Пакет тестирования модулей iOS», чтобы снова добавить его. Как вы можете видеть, вы также можете добавить UI Testing Bundle таким же образом.
Несколько других идей
Или...
Оставьте комментарий или ответ ниже, если вы нашли что-то еще, что работает.
Связанный
источник
Проблема для меня заключалась в том, что цель развертывания iOS тестов не была такой же, как основная цель. Так что не забудьте проверить это.
В вашей тестовой цели:
источник
Enable Bitcode
чтобыNo
на Test Bundle.Так вот как я начал работать над своим кодом, попробовав все предложенные решения из предыдущих предложений.
И все работало как шарм. Надеюсь это поможет.
источник
Следует обратить внимание на то, что если в имени вашего модуля есть тире,
-
то вместо этого вам придется ссылаться на него с подчеркиванием_
. По какой-то причине я подозревал, что это может быть проблемой, и это действительно было моей проблемой.например.
@testable import Ocean-Swift
становится@testable import Ocean_Swift
Еще одна вещь, если вы используете
@testable
синтаксис, обязательно не включайте свой производственный код в цель тестирования. Я обнаружил, что это вызовет необъяснимую странность.источник
App (Dev)
, тестируемый модуль сталApp__Dev_
Это звучит как ошибка с настройками сборки обеих целей. Вы должны убедиться, что:
ENABLE_TESTABILITY
равно Да для обеих целей.PRODUCT_MODULE_NAME
Значение испытательной мишени должно отличаться от одного приложения.источник
Еще одна вещь, которую нужно проверить: если у вас есть проект Objective-C, но вы пишете модульные тесты в Swift, убедитесь, что основная цель использует хотя бы один файл Swift!
Больше информации:
Я работал над проектом Objective-C, но хотел написать модульные тесты в Swift.
Я добавил файл Swift к основной цели, чтобы сгенерировать необходимый файл ProjectName-Bridging-Header.h, написал свои тесты и все работало правильно.
Позже я удалил файл Swift, потому что я думал, что он мне не нужен (весь основной код цели находится в Objective-C ... Я только писал тесты в Swift).
Я не заметил проблемы позже, после того, как я сделал «чистую / чистую папку сборки», и проблема «Нет такого модуля» обнаружилась. После того, как я почесал голову, я добавил новый пустой файл Swift, и проблема исчезла.
Я тестировал его несколько раз с / без файла Swift, и он работает только с ним ... поэтому мне нужно либо оставить пустой проект в проекте, либо преобразовать Objective-C в Swift, либо добавить несколько Новый код проекта написан на Swift.
источник
@testable import Foo
строку, ваши модульные тесты должны работать правильно.Для тех, кто прокручивал до последнего ответа и до сих пор ничего не получалось, вот что сделал для меня, следуя всем остальным советам. Я использую Xcode 11:
В моем случае проблема заключалась в том, что я сменил название продукта
Я не знал, что изменение названия продукта также изменит название модуля продукта , то есть то, которое используется для импорта модуля в моих тестовых файлах. Я изменил свой импорт следующим образом:
@testable import New_Name
Это сработало
Я надеюсь, что это помогает
источник
Потратив пару дней на эти проблемы, я наконец-то занялся своим проектом. Проблема была в Bridging Header - путь в цели Tests не может быть пустым, если вы используете Bridging Header в своей основной цели
Надеюсь, это сэкономит время для кого-то.
источник
Убедитесь, что при настройке схемы тестирования цель теста находится в списке.
Рядом с кнопкой воспроизведения выберите схему тестирования, затем Редактируйте схему ..., перейдите в раздел «Построение», нажмите «плюс +» и выберите цель, с которой хотите провести тестирование.
В моем случае у нас есть внутренняя цель, с которой мы разрабатываем (с небольшими отличиями), и после слияния она была удалена из тестовой конфигурации.
источник
Вот еще одна вещь, чтобы проверить, что нет в списке. Для меня это было связано с моей командой, возможно, потому, что агент нашей команды еще не согласился с последним лицензионным соглашением! Как только я выбрал другую команду в общих настройках своей цели, и затем я определил конкретную цель развертывания, такую как 12.1 или 11.0, внезапно предупреждение «Нет такого модуля» исчезло.
источник
В моем случае у меня было 3 вопроса. Во-первых, мне нужно было указать путь импорта в:
Во-вторых, я использовал Pod и мне пришлось импортировать эти pod в свои тесты, используя также:
В-третьих, я использовал заголовок моста в своей цели, поэтому мне пришлось указать заголовок моста таким же, как в тесте.
источник
Моя проблема заключалась в том, что класс, который я хотел протестировать, должен был находиться в отдельном модуле (клиент API), но этот класс был на самом деле членом цели приложения, а не цели платформы. Изменение целевого членства в классе исключило ошибку импорта!
источник
Среда: Xcode Version 9.0 (9A235)
Сценарий: тестирование инфраструктуры с открытым исходным кодом.
У меня была такая же проблема: «Нет такого модуля».
Решение:
Вот тестовый файл:
источник
У меня была такая же проблема. Очистка папки сборки и перезапуск XCode не работали.
Что меня сработало, так это то, что параметр «Build Active Architecture Only» вашей цели и схемы тестирования соответствовал настройке цели и схемы вашего приложения.
источник
Я следовал за шагами выше, которые работали. Однако у моего проекта было еще несколько проблем. Я получил это предупреждение, и я не смог получить доступ к классам из моего основного проекта для тестирования в моей цели теста.
Я обнаружил, что имя вашего тестового целевого модуля продукта (YourTestTarget -> Build Settings -> search
product module
) не может совпадать с именем вашего проекта.Как только я изменил имя модуля продукта для моей цели тестирования, все заработало.
источник
Я попробовал все ответы здесь, но красный флаг не исчезнет. Но я заставил его работать, просто «запустив» пустой тест, и все прояснилось.
Вещи, которые я хотел бы убедиться, сделаны:
источник
Для меня решение было переименовать @testable import myproject_ios в @testable import myproject после того, как я обновил имя продукта target myproject-ios в Настройках сборки / Упаковка / Имя продукта / с $ {TARGET_NAME} на myproject.
источник
Это было исправлено для меня, когда я изменил цель развертывания с 9.3 до 11.0.
Общие> Цель развертывания> "11.0"
источник
Мое решение здесь.
Сначала нажмите OdeAlSwiftUITest.swift, затем отметьте Project TargetName в целевом членстве.
источник
Если вы используете xcodebuild и обнаружили эту проблему, рассмотрите возможность добавления флага рабочей области к команде build.
Поменял это
К этому
источник
В целевом тесте параметров сборки проверьте хост-тестирование, оно принимает имя, заданное в PRODUCT_NAME. Это то имя, которое вы должны использовать в тестовых классах.
Я рекомендую не изменять PRODUCT_NAME (соответствует имени основной цели)
источник
Нажмите MyAppTests.swift в навигаторе проекта и щелкните правой панели, проверьте ваш модуль в целевом членстве. Это работает в моем.
источник
CocoaPods рекомендует добавить
inherit! :search_paths
к вашей цели теста следующим образом:Источник: https://github.com/CocoaPods/CocoaPods/pull/8423#issue-244992565
источник
Как описано в этом ответе, я добавлял тесты Swift в проект только для Obj-C. Решением было добавить фиктивный класс Swift, после чего Xcode предложит добавить соединительный заголовок, а затем удалить класс Swift. Все было хорошо после этого.
источник
Помимо других перечисленных вещей, мне пришлось добавить файл с классом, который я пытался протестировать, в мои исходные коды для модуля модульного тестирования.
источник
Я думаю, что это могло произойти, потому что я удалил примеры тестов.
Я удалил комплект модульных тестов, затем снова добавил его, как показано на рисунках ниже, и все снова было хорошо.
источник