Saya baru-baru ini diperbarui ke Xcode 7 beta 5. Saya mencoba menambahkan unit test ke proyek sebelumnya, tetapi saya mendapatkan pesan kesalahan "Tidak ada modul [myModuleName]" di @testable import myModuleName
telepon.
Saya mencoba
- membersihkan proyek dengan OptionClean Build Folder
- memeriksa bahwa "Aktifkan Testability" (debug) disetel ke Ya di Opsi Bangun
- menghapus target pengujian dan kemudian menambahkan kembali bundel pengujian Unit iOS
Tak satu pun dari ini bekerja untuk proyek ini (tapi saya mendapatkan pengujian untuk bekerja di proyek lain). Adakah orang lain yang memiliki masalah ini dan menyelesaikannya?
ios
xcode
unit-testing
xctest
Suragch
sumber
sumber
Jawaban:
Silakan periksa Nama Modul Anda yang ingin Anda impor
@testable import "ModuleName"
. Nama modul harus sama padaTarget->Build Settings-> Product Module Name
sumber
space
dan_
-
dan_
. Salah satu proyek saya memiliki minus-
dalam namanya, tetapi modulnya memiliki garis bawah_
sebagai gantinya""
ide itu, dan mendapatkanExpected identifier in import declaration
Build Settings
pilih proyek Anda (bukan tes atau tes UI) kemudian cariPRODUCT_MODULE_NAME
apa pun yang muncul ada yang harus@testable import
Jawaban yang berhasil bagi saya
Jawabannya adalah saya memiliki beberapa kesalahan dalam proyek yang membuat pembangunan gagal. (Itu hanya bug standar Anda setiap hari dalam kode.) Setelah saya memperbaiki kesalahan dan melakukan pembersihan dan pembangunan lainnya, itu berhasil.
Perhatikan bahwa kesalahan ini tidak muncul pada awalnya. Agar mereka muncul:
Jika ada kesalahan lain, itu harus muncul sekarang. Perbaiki dan kemudian batalkan komentar kode file Uji Anda. Kesalahan "Tidak ada modul seperti itu" hilang untuk saya.
Jika ini tidak menyelesaikan masalah bagi orang lain, Anda juga dapat mencoba yang berikut:
Bersihkan folder build
Buka menu Produk, tahan Option, dan klik "Clean Build Folder ..."
Pastikan Aktifkan Testability diatur ke Ya
Di Project Navigator klik nama proyek Anda. Pilih Pengaturan Bangun dan gulir ke bawah ke Opsi Bangun. Pastikan Aktifkan Testability adalah Ya (untuk debug).
Hapus dan tambahkan kembali target Tes Anda
Jika Anda telah melakukan hal-hal lain, tebakan saya adalah bahwa Anda mungkin tidak perlu melakukan ini. Tetapi jika Anda melakukannya, ingatlah untuk menyimpan Tes Unit apa pun yang telah Anda tulis.
Klik nama proyek Anda di Navigator Proyek. Kemudian pilih target Tes Anda. Klik tombol minus (-) di bagian bawah untuk menghapusnya.
Kemudian klik tombol tambah (+) dan pilih Bundel Pengujian Unit iOS untuk menambahkannya kembali. Seperti yang Anda lihat, Anda juga bisa menambahkan Bundel Pengujian UI dengan cara yang sama.
Beberapa ide lain
Atau...
Tinggalkan komentar atau jawaban di bawah ini jika Anda menemukan sesuatu yang berhasil.
Terkait
sumber
Masalahnya bagi saya adalah target penyebaran iOS dari tes tidak ditetapkan untuk menjadi sama dengan target utama. Jadi pastikan untuk memeriksa ini.
Di target pengujian Anda:
sumber
Enable Bitcode
untukNo
di Uji Bundle.Jadi ini adalah bagaimana saya mulai mendapatkan kode saya untuk bekerja setelah mencoba semua solusi yang disarankan dari saran sebelumnya.
Dan semuanya bekerja seperti pesona. Semoga ini membantu.
sumber
Satu hal yang perlu diperhatikan adalah jika nama modul Anda memiliki karakter tanda hubung di dalamnya,
-
maka Anda harus merujuknya dengan underbar sebagai gantinya_
. Untuk beberapa alasan saya curiga ini mungkin masalah dan itu memang masalah saya.misalnya.
@testable import Ocean-Swift
menjadi@testable import Ocean_Swift
Hanya satu hal lagi, jika Anda menggunakan
@testable
sintaksis pastikan untuk tidak memasukkan kode produksi Anda dalam target pengujian Anda. Saya menemukan ini akan menyebabkan keanehan yang tidak dapat dijelaskan.sumber
App (Dev)
, Modul yang dapat diuji menjadiApp__Dev_
Ini terdengar sebagai kesalahan dengan pengaturan build dari kedua target. Anda perlu memastikan bahwa:
ENABLE_TESTABILITY
sama dengan Ya untuk kedua target.PRODUCT_MODULE_NAME
nilai target uji harus berbeda dari salah satu aplikasi.sumber
Satu hal lagi yang perlu diperiksa: Jika Anda memiliki proyek Objective-C, tetapi sedang menulis unit test di Swift, pastikan target utama menggunakan setidaknya satu file Swift!
Info lebih lanjut:
Saya sedang mengerjakan proyek Objective-C, tetapi ingin menulis unit test di Swift.
Saya menambahkan file Swift ke target utama untuk menghasilkan file ProjectName-Bridging-Header.h yang diperlukan, menulis tes saya dan semuanya bekerja dengan baik.
Kemudian saya menghapus file Swift karena saya pikir saya tidak membutuhkannya (semua kode target utama ada di Objective-C ... Saya hanya menulis tes di Swift).
Saya tidak melihat masalah sampai nanti, setelah saya melakukan "folder build bersih / bersih" dan masalah "No Such Module" muncul. Setelah beberapa goresan kepala saya menambahkan file Swift kosong baru dan masalahnya hilang.
Saya telah mengujinya berkali-kali dengan / tanpa file Swift, dan hanya berfungsi dengan itu ... jadi, saya akan perlu meninggalkan file kosong dalam proyek, mengubah beberapa Objective-C menjadi Swift, atau menambahkan beberapa kode baru untuk proyek yang ditulis dalam Swift.
sumber
@testable import Foo
garis, tes unit Anda harus berjalan dengan benar.Bagi mereka yang telah menggulir hingga jawaban terakhir dan masih belum ada yang berhasil, berikut adalah apa yang dilakukan untuk saya setelah mengikuti semua saran jawaban lainnya. Saya menggunakan Xcode 11:
Apa yang menyebabkan masalah dalam kasus saya adalah saya mengubah Nama Produk saya
Saya tidak tahu bahwa mengubah nama produk juga akan mengubah Nama Modul Produk , yaitu yang digunakan untuk impor modul dalam file pengujian saya. Saya mengubah impor saya sebagai berikut:
@testable impor New_Name
Itu berhasil
Saya harap ini membantu
sumber
Setelah menghabiskan beberapa hari pada masalah ini akhirnya saya membuatnya bekerja dengan proyek saya. Masalahnya ada di Bridging Header - jalur di target Tes tidak boleh kosong jika Anda menggunakan Bridging Header di target utama Anda
Semoga ini akan menghemat waktu bagi seseorang.
sumber
Pastikan di bawah pengaturan build skema pengujian, target pengujian ada dalam daftar.
Di samping tombol putar, pilih skema pengujian, lalu Edit skema ..., buka bagian Build, klik plus + dan pilih target yang ingin Anda uji.
Dalam kasus saya, kami memiliki target internal yang kami kembangkan (beberapa perbedaan kecil) dan setelah bergabung, itu dihapus dari konfigurasi uji.
sumber
Berikut ini adalah hal lain untuk memeriksa yang tidak terdaftar. Bagi saya, itu ada hubungannya dengan tim saya, mungkin karena Agen Tim kami belum menyetujui Perjanjian Lisensi terbaru! Setelah saya memilih Tim yang berbeda di pengaturan Umum Target saya, DAN kemudian saya menentukan Target Penempatan spesifik seperti 12.1 atau 11.0, tiba-tiba peringatan "No Such Module" hilang.
sumber
Dalam kasus saya, saya memiliki 3 masalah. Yang pertama adalah saya harus menentukan jalur impor di:
Yang kedua adalah saya menggunakan Pod dan saya harus mengimpor pod ini ke pengujian saya juga menggunakan:
Yang ketiga karena saya menggunakan header bridging di target saya, jadi saya harus menentukan header bridging yang sama untuk tes.
sumber
Masalah saya adalah bahwa kelas yang ingin saya uji seharusnya berada dalam modul terpisah (API Client), tetapi kelas itu sebenarnya adalah anggota target aplikasi dan bukan target kerangka kerja. Mengubah target keanggotaan kelas membuat kesalahan impor hilang!
sumber
Lingkungan: Xcode Versi 9.0 (9A235)
Skenario: Menguji kerangka kerja sumber terbuka.
Saya memiliki masalah yang sama: 'Tidak ada modul seperti itu'.
Larutan:
Inilah file tesnya:
sumber
Saya punya masalah yang sama. Membersihkan folder build dan memulai ulang Xcode tidak berhasil.
Apa yang berhasil bagi saya adalah memastikan bahwa pengaturan untuk "Hanya Membangun Arsitektur Aktif" dari target dan skema pengujian Anda cocok dengan pengaturan target dan skema aplikasi Anda.
sumber
Saya mengikuti langkah-langkah di atas, yang berhasil. Namun, proyek saya memiliki beberapa masalah lagi. Saya mendapat peringatan ini dan saya tidak bisa mengakses kelas dari proyek utama saya untuk menguji target pengujian saya.
Saya menemukan bahwa target Tes Anda Nama Modul Produk (YourTestTarget -> Pengaturan Bangun -> pencarian
product module
) tidak boleh sama dengan nama proyek Anda.Setelah saya mengubah Nama Modul Produk untuk target pengujian saya semuanya bekerja.
sumber
Solusi saya ada di sini.
Pertama, klik OdeAlSwiftUITest.swift, lalu periksa Project TargetName dalam keanggotaan target.
sumber
Klik MyAppTests.swift di navigator proyek, dan klik panel kanan, periksa modul Anda di Keanggotaan target. Itu bekerja di tambang.
sumber
Saya mencoba semua jawaban di sini tetapi bendera merah tidak mau hilang. Tetapi saya berhasil dengan hanya "menjalankan" tes kosong terlepas dan itu beres.
Hal-hal yang saya ingin pastikan sudah selesai:
sumber
Bagi saya solusinya adalah mengubah nama @testable import myproject_ios menjadi @testable import myproject setelah saya memperbarui nama produk target myproject-ios di Build Settings / Packaging / Nama Produk / dari $ {TARGET_NAME} menjadi myproject.
sumber
Ini diperbaiki untuk saya ketika saya mengubah Target Penempatan dari 9.3 menjadi 11.0.
Umum> Target Penerapan> "11.0"
sumber
Jika Anda menggunakan xcodebuild dan menemukan masalah ini, pertimbangkan untuk menambahkan flag workspace ke perintah build.
Mengubah ini
Untuk ini
sumber
Dalam membangun target pengujian pengaturan, periksa pengujian host, diperlukan nama yang ditetapkan di PRODUCT_NAME. Itu adalah nama yang harus Anda gunakan di kelas tes.
Saya merekomendasikan untuk tidak mengubah PRODUCT_NAME (nama yang cocok dengan target utama)
sumber
CocoaPods merekomendasikan
inherit! :search_paths
untuk menambah target pengujian Anda seperti:Sumber: https://github.com/CocoaPods/CocoaPods/pull/8423#issue-244992565
sumber
Seperti yang dijelaskan dalam jawaban ini saya menambahkan tes Swift ke proyek Obj-C saja. Solusinya adalah menambahkan kelas Swift dummy, setelah itu Xcode akan meminta untuk menambahkan header bridging, kemudian menghapus kelas Swift. Semua baik-baik saja setelah itu.
sumber
Saya menambahkan hal-hal lain yang terdaftar, saya harus menambahkan file dengan kelas yang saya coba uji ke sumber kompilasi saya untuk modul unit test
sumber
Saya pikir ini mungkin terjadi karena saya menghapus contoh tes.
Saya menghapus bundel tes Unit kemudian menambahkannya kembali seperti yang ditunjukkan pada gambar di bawah dan semuanya baik-baik saja.
sumber