Неможливо завантажити базовий модуль для XCTest


180

Я працюю швидко на Xcode і за замовчуванням створює тестовий файл, на який посилається XCTest.

Коли я встановлюю цільове членство в своєму головному проекті, це викликає цю помилку

Неможливо завантажити базовий модуль для XCTest

Якщо це цільове членство не встановлено, тести працюють належним чином і все працює нормально.

PS: Я новачок швидко, і це, мабуть, німе питання (будь ласка, просвіти мене)


17
Немає німих питань коник, лише німі запитувачі. ;-) Відмінне запитання, оскільки всі, хто це прочитає, матимуть ту саму проблему.
Lance Kind

Відповіді:


168

Основний проект не пов'язаний з рамкою XCUnit. Вам слід створити окрему ціль тестування для свого проекту, якщо такої ще немає, і додати до неї цільові вихідні файли.

  1. Виберіть проект у Навігаторі проектів. Це відкриє налаштування проекту в редакторі.
  2. Натисніть кнопку "+" внизу стовпця з переліком ваших цілей.

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

  1. Якщо ви працюєте над шаблоном проекту iOS , виберіть iOS > Test > iOS Unit Testing Bundle.

    Якщо ви працюєте над шаблоном проекту OS X , виберіть OS X > Test > OS X Unit Testing Bundle.


3
Тим часом для iOS це називається iOS UITesting Bundle (використовуйте його для тестів інтерфейсу користувача) або пакет iOS Unit Testing Bundle (це для
модульних

184

Перевірте, чи відповідний файл не в головній цілі, а лише в тестовій цілі. Тільки тестова ціль матиме цю рамку для імпорту.


16
Якщо це допомагає. Виберіть ціль "Без тесту" -> Фази збірки -> Збір джерел. Переконайтеся, що "ClassTest.swift" не знаходиться у звичайній цілі збірки.
Nick N

І якщо він знаходиться в основному і тестовому пакеті, як ви вилучите його з основного.
Джеймс Робінсон

1
Дякую @NickN, ти вказав на точну проблему, яку я мав, і ось це вирішено зараз!
Найшта

ЯКЩО це на тестовій цілі, я, здається, не можу отримати доступ до жодного з моїх основних методів тестування в моїй головній цілі.
UKDataGeek

спасибі це спрацювало як шарм. просто видалили тестові файли.
Ccr

32

Ви тільки що додали свій тестовий файл / клас в основну ціль, а не в тестову ціль помилково. Просто як це.

Рішення:

1) Видаліть тестовий файл зі списку "Збір джерел" на вкладці "Фази збірки" для основної цілі

2) Додайте той самий файл у "Збір джерел" на вкладці "Фази збірки" для тестової цілі

Це має вирішити проблему


15

Я отримую цю помилку, якщо створюю динамічну рамкову ціль macOS, на яку посилається XCTest.framework(ціль - це рамкова ціль, а не тестова ціль!).

У цьому випадку проблема вирішується додаванням

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks

до проекту "Налаштування параметрів / Шляхи пошуку рамки".


Ідеально! Дякую!
Lance Kind

9
Краще: $(PLATFORM_DIR)/Developer/Library/Frameworksякщо у вас встановлено кілька версій Xcode під різними назвами (наприклад, версії та бета-версії).
пограбувати майоф

Дякую @robmayoff, це було правильним рішенням ;-)
Олівер Пірмен

Це правильна відповідь під час створення основи для тестування підтримки.
Даніель Вуд

7

Після безлічі усунення несправностей і підстрибування навколо таких сторінок Stack Overflow мені вдалося знайти одну деталь, про яку не згадували на інших сторінках усунення несправностей модуля iOS Unit Test.

Якщо ваш проект використовує CocoaPods, не забудьте включити тестову ціль, вкладену в основну ціль програми. Ваш підфільм може не включати його, якщо ви створили тестову ціль після запуску pod init. Ваш підфільм повинен виглядати приблизно так:

target 'YourApp' do
    target 'YourAppTests' do
        inherit! :search_paths
        # Pods for testing
    end
end

Не забудьте зберегти свій підфайл та запустити pod installпісля цього.

Сподіваюся, це допомагає!


5

Це, можливо, трохи пізно, але що вам потрібно зробити:

Клацніть на Файл> Створити> Ціль> Пакет тестування блоку iOS.

А потім додайте свої тести туди. Це працювало для мене. Проблема полягала в тому, що я не вибрав тести створення модулів під час створення свого проекту. Сподіваюся, що це комусь допоможе.


2

Ця проблема виникає два рази у вашому проекті.

  1. Коли ви не додаєте UnitTestingBundle у свій проект під час створення нового проекту.
  2. Коли ви встановлюєте CocoaPods у своєму проекті десь не кожного разу.

1: Відповідь:

  • Перейдіть до файлу Клацніть на файл.

  • Потім ви бачите Перший варіант Новий клік на ньому.

  • Після натискання на нього ви бачите деякий варіант натискання на ціль.

  • І тоді на панелі пошуку Search IOS Unit Testing Bundle and Add Problem вирішено.

  • якщо компілятор не може надати вам дозвіл на додавання цього, то спробуйте Другий метод, коли надано нижче.

2. Відповідь на проблему CocoaPod:

  • Перейдіть до продукту Натисніть на товар.

  • Клацніть на очистити або натисніть cmd + k.

  • Проблема вирішена.


2

Хоча прийнята відповідь вирішує цю проблему більшість разів, є ще один спосіб ви можете зіткнутися з цією помилкою.

Якщо ви вже переконалися, що:

Як вказували @pwc @ nick-n та інші

  1. ClassTest.swiftФайл для членства в цільової рахунок того , що він тільки прикріплений до мети тестування.
  2. ClassTest.swiftЦе НЕ видно під вами основні цільові програми> Джерела Будівництва> Джерела Компілювати

Ось що ще ви можете перевірити:

у вашому .podspecsфайлі

Переконайтесь, що ваш файл source_filesне містить прямого чи опосередкованого каталогу тестування.

наприклад :

s.source_files = ["Classes/**/*.{swift}", "Classes/**/*.{xib}"]
s.exclude_files = ["Classes/Exclude", "Classes/MyPodProjTests/"]

Зверніть увагу, що Classes/**/*.{swift}включає все, що переважає той факт, що каталог MyPodProjTestsпотрібно виключити.

Рішення:

s.source_files = ["Classes/MyPodProj/**/*.{swift}", "Classes/**/*.{xib}"]

Примітка. Це надзвичайно крайній випадок і цілком людська помилка, але я вважав, що це варто зазначити.


Відмінне зауваження, я все включив у своє s.source_files. Дякую!
Маурісіо

1

Переконайтесь, що цільове членство відмінено для всіх модулів, коли вибрано тестовий фреймворк. Ви можете переглянути параметр Цільове членство, вибравши Перегляд-> Утиліти-> Показати інспектор файлів


1

У моєму випадку я робив тести для приватного стручка, тож у підспеку було так:

s.test_spec 'Tests' do |test_spec|
test_spec.source_files = 'Tests/*.swift' end

Але в Podfile я забув принести тестову специфікацію, як таку:

target 'MyApp' do
use_frameworks!
pod 'CoconutLib', '~> 1.0', :testspecs => ['Tests'] end

0

Я робив усе вищесказане, але все одно мені не дозволяли отримати доступ до методів, які я хотів перевірити. Але перш ніж я писав будь-який тестовий випадок, будував проект один раз, і тоді методи були доступні для тестування. Тому спробуйте, і дайте мені знати, чи вирішила вона якусь проблему.


0

У мене була така ж проблема, і для мене рішення було:

  1. Виберіть мою схему
  2. Редагувати схему ...
  3. Потім, коли відкриється вікно конфігурації схеми, виберіть ліву вкладку з назвою "Тест" для переадресації тут: введіть тут опис зображення
  4. Як ви можете бачити, мої UITests тут не додаються, але існують у моєму проекті, тому мені довелося просто натиснути кнопку плюс і вибрати мою ціль UITests таким чином: введіть тут опис зображення
  5. Потім натисніть кнопку "Додати" і закрийте подання конфігурації
  6. Закінчіть проект із чистим проектом і повторіть спробу
  7. І не забудьте це також переконатись: https://developer.apple.com/library/archive/qa/qa1954/_index.html

Сподіваюся, ця відповідь допоможе.

PS: Остання думка в моїй тестовій цілі в налаштуваннях збірки, я повинен був перевірити цю властивість, яка не була налаштована правильно:

DEBUG_INFORMATION_FORMAT = dwarf; 
ONLY_ACTIVE_ARCH = YES;
VALIDATE_PRODUCT = NO;

0

Так само, як @Alfishe згадано вище:

Ви повинні видалити тестові файли з- Compiler SourcesпідBuild Phases

Як показано нижче


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


1
Якщо ви це зробите, ви не можете виконати тести, наскільки я знаю
Хуан


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