Tidak dapat memuat modul yang mendasari untuk XCTest


180

Saya sedang bekerja dengan cepat pada Xcode dan secara default itu membuat file uji yang merujuk XCTest.

Ketika saya menetapkan target keanggotaan ke proyek utama saya itu menyebabkan kesalahan ini

Tidak dapat memuat modul yang mendasari untuk XCTest

Jika keanggotaan target ini tidak disetel, tes akan berjalan dengan baik dan semuanya berfungsi dengan baik.

PS: Saya baru untuk cepat dan itu mungkin pertanyaan bodoh (tolong beri tahu saya)


17
Tidak ada pertanyaan bodoh belalang, hanya penanya bodoh. ;-) Pertanyaan yang bagus karena semua orang yang membaca ini akan memiliki masalah yang sama.
Lance Kind

Jawaban:


168

Proyek utama tidak terhubung dengan kerangka kerja XCUnit. Anda harus membuat target pengujian terpisah untuk proyek Anda, jika belum ada, dan menambahkan file sumber pengujian Anda ke target itu.

  1. Pilih proyek Anda di Navigator Proyek. Ini akan membuka pengaturan proyek di editor.
  2. Klik tombol "+" di bagian bawah kolom yang mencantumkan Target Anda.

masukkan deskripsi gambar di sini

  1. Jika Anda bekerja pada templat proyek iOS , pilih iOS > Test > iOS Unit Testing Bundle.

    Jika Anda bekerja pada templat proyek OS X , pilih OS X > Test > OS X Unit Testing Bundle.


3
Sementara itu untuk iOS itu disebut iOS UITesting Bundle (menggunakannya untuk Tes UI) atau Bundel Pengujian Unit iOS (ini untuk Tes Unit ...)
kuzdu

184

Periksa kembali apakah file yang dimaksud tidak berada di target utama melainkan hanya target tes. Hanya target pengujian yang akan memiliki kerangka kerja untuk mengimpor.


16
Jika itu membantu. Pilih Target 'Non Tes' -> Bangun Fase -> Kompilasi Sumber. Pastikan "ClassTest.swift" Anda tidak dalam target build normal.
Nick N

Dan jika itu ada di bundel utama dan bundel pengujian bagaimana Anda menghapusnya dari bundel utama.
James Robinson

1
Terima kasih @NickN, Anda menunjukkan masalah yang sebenarnya saya alami dan itu sudah diperbaiki sekarang!
Naishta

JIKA itu pada Target Tes maka saya tidak bisa mengakses metode pengujian utama saya di Target utama saya.
UKDataGeek

Terima kasih itu bekerja seperti pesona. hanya menghapus file uji yang berhasil.
Ccr

32

Anda baru saja menambahkan file tes / kelas Anda ke target utama dan bukan ke target tes karena kesalahan. Sederhana seperti itu.

Larutan:

1) Hapus file uji dari daftar "Kompilasi Sumber" pada tab "Bangun Fase" untuk target utama

2) Tambahkan file yang sama ke "Kompilasi Sumber" pada tab "Bangun Fase" untuk target pengujian

Itu harus menyelesaikan masalah


15

Saya mendapatkan kesalahan ini jika saya membuat target kerangka kerja macOS dinamis, yang terhubung ke XCTest.framework(target adalah target kerangka kerja, bukan target pengujian!).

Dalam hal ini masalahnya diselesaikan dengan menambahkan

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

untuk memproyeksikan "Membangun Pengaturan / Jalur Pencarian Kerangka".


Sempurna! Terima kasih!
Lance Kind

9
Lebih baik: $(PLATFORM_DIR)/Developer/Library/Frameworksjika Anda memiliki beberapa versi Xcode yang diinstal dengan nama yang berbeda (mis. Rilis dan versi beta).
rob mayoff

Terima kasih @robmayoff ini adalah solusi yang tepat ;-)
Oliver Pearmain

Ini adalah jawaban yang benar ketika membangun kerangka kerja untuk menguji dukungan.
Daniel Wood

7

Setelah banyak pemecahan masalah dan memantul di sekitar halaman Stack Overflow seperti ini, saya berhasil menemukan satu detail yang tidak disebutkan pada halaman pemecahan masalah Tes Unit iOS lainnya.

Jika proyek Anda menggunakan CocoaPods, pastikan untuk memasukkan target pengujian Anda yang bersarang di dalam target aplikasi utama Anda. Podfile Anda mungkin tidak menyertakannya jika Anda membuat target pengujian setelah berjalan pod init. Podfile Anda akan terlihat seperti ini:

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

Ingatlah untuk menyimpan podfile Anda dan jalankan pod installsetelah melakukannya.

Semoga ini bisa membantu!


5

Ini mungkin agak terlambat tetapi yang harus Anda lakukan adalah:

Klik File> Baru> Target> Bundel Pengujian Unit iOS.

Dan kemudian tambahkan tes Anda di sana. Ini berhasil untuk saya. Masalahnya adalah bahwa saya tidak memilih membuat unit test ketika saya membuat proyek saya. Semoga ini bisa membantu seseorang.


2

Masalah ini terjadi dua kali di proyek Anda.

  1. Saat Anda Tidak Menambahkan UnitTestingBundle dalam proyek Anda saat membuat Proyek Baru.
  2. Ketika Anda menginstal CocoaPods di Proyek Anda kadang-kadang tidak setiap waktu.

1: Jawab:

  • Pergi ke File Klik pada File.

  • Kemudian Anda melihat opsi Pertama Klik Baru di atasnya.

  • Setelah Mengkliknya, Anda melihat Beberapa Opsi Klik pada Target.

  • Dan kemudian di Searchbar, Cari Unit Pengujian Bundel IOS dan Tambah Masalah terpecahkan.

  • jika Compiler tidak dapat memberi Anda izin untuk menambahkan ini, maka coba Metode Kedua saat diberikan Di Bawah Ini.

2. Jawab Masalah CocoaPod:

  • Pergi ke Produk Klik pada Produk.

  • Klik bersih atau tekan cmd + k.

  • Masalah terselesaikan.


2

Meskipun jawaban yang diterima memecahkan masalah ini sebagian besar kali, ada satu lagi cara Anda dapat menemukan kesalahan ini.

Jika Anda sudah memastikan bahwa:

Seperti yang ditunjukkan oleh @pwc @ nick-n dan lainnya

  1. The ClassTest.swiftfile untuk keanggotaan sasaran dengan memastikan bahwa itu adalah hanya melekat pada target Testing.
  2. The ClassTest.swiftadalah tidak terlihat di bawah Anda utama sasaran aplikasi> Sumber Build> Sumber Kompilasi

Inilah yang bisa Anda periksa:

di Anda .podspecs file

Pastikan bahwa Anda source_files tidak secara langsung atau tidak langsung memasukkan direktori pengujian.

sebagai contoh :

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

Catatan itu Classes/**/*.{swift}mencakup semua yang menimpa fakta bahwa direktoriMyPodProjTests harus dikecualikan.

Larutan:

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

Catatan: Ini adalah kasus yang sangat canggih dan sepenuhnya merupakan kesalahan manusia, tetapi saya pikir itu layak untuk ditunjukkan.


Komentar luar biasa, saya telah memasukkan semuanya ke dalam s.source_files. Terima kasih!
Mauricio Chirino

1

Pastikan Keanggotaan Target dicentang untuk semua modul saat kerangka uji dipilih. Anda dapat melihat opsi Target Keanggotaan dengan memilih View-> Utilities-> Show File Inspector


1

Dalam kasus saya, saya membuat tes untuk pod pribadi, jadi di podspec seperti:

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

Tetapi di Podfile saya lupa membawa spesifikasi pengujian, seperti:

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

0

Saya melakukan semua hal di atas, tetapi tetap saja saya tidak diizinkan mengakses metode yang ingin saya uji. Tetapi sebelum saya menulis test case apa pun membangun proyek sekali dan kemudian metode dapat diakses untuk menguji. Jadi cobalah dan beri tahu saya jika itu menyelesaikan masalah orang lain.


0

Saya memiliki masalah yang sama dan solusi bagi saya adalah:

  1. Pilih skema saya
  2. Edit Skema ...
  3. Kemudian ketika jendela konfigurasi Skema dibuka pilih tab kiri bernama "Test" untuk diarahkan ke sini: masukkan deskripsi gambar di sini
  4. Seperti yang Anda lihat UITests saya tidak ditambahkan di sini tetapi ada di proyek saya, jadi saya cukup mengetuk tombol plus dan pilih target UITests saya seperti ini: masukkan deskripsi gambar di sini
  5. Lalu ketuk tombol "Tambah" dan tutup tampilan konfigurasi
  6. Selesai dengan proyek bersih dan coba lagi itu harus berhasil
  7. Dan jangan lupa untuk memverifikasi itu juga: https://developer.apple.com/library/archive/qa/qa1954/_index.html

Semoga jawaban ini akan membantu.

PS: satu pemikiran terakhir dalam target Tes saya dalam pengaturan bangunan saya harus memeriksa properti ini yang tidak dikonfigurasi dengan benar:

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

0

Sama seperti @Alfishe yang disebutkan di atas:

Anda harus menghapus file uji dari Compiler SourcesbawahBuild Phases

Seperti yang ditunjukkan di bawah ini


masukkan deskripsi gambar di sini


1
Jika Anda melakukan itu, Anda tidak dapat melakukan tes, sejauh yang saya tahu
Juan Curti


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.