Beberapa kode saya unit pengujian perlu memuat file sumber daya. Ini berisi baris berikut:
NSString *path = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"txt"];
Dalam aplikasi itu berjalan dengan baik, tetapi ketika dijalankan oleh kerangka pengujian unit pathForResource:
mengembalikan nihil, artinya tidak bisa menemukan foo.txt
.
Saya telah memastikan bahwa foo.txt
itu termasuk dalam tahap pembuatan Salin Kumpulan Sumber Daya dari target pengujian unit, jadi mengapa tidak dapat menemukan file?
self
mengacu pada kelas di bundel utama, bukan kelas kasus uji. Ganti[self class]
dengan kelas apa pun di bundel utama Anda. Saya akan mengedit contoh saya.bundleForClass:
kelas dalam bundel pengujian unit. Anda harus mendapatkan path file dalam kode tes unit Anda, kemudian meneruskan string path ke kode Anda yang lain.Implementasi Swift:
Cepat 2
Swift 3, Swift 4
Bundle menyediakan cara untuk menemukan jalur utama dan uji untuk konfigurasi Anda:
Dalam Xcode 6 | 7 | 8 | 9, jalur bundel unit-test akan berada dalam
Developer/Xcode/DerivedData
sesuatu seperti ...... yang terpisah dari
Developer/CoreSimulator/Devices
jalur bundel (non-unit-test) biasa :Perhatikan juga bahwa unit test executable, secara default, terhubung dengan kode aplikasi. Namun, kode tes unit hanya boleh memiliki Keanggotaan Target hanya di bundel tes. Kode aplikasi seharusnya hanya memiliki Keanggotaan Target dalam bundel aplikasi. Saat runtime, bundel target uji unit disuntikkan ke bundel aplikasi untuk dieksekusi .
Manajer Paket Swift (SPM) 4:
Catatan: Secara default, baris perintah
swift test
akan membuatMyProjectPackageTests.xctest
bundel uji. Dan,swift package generate-xcodeproj
akan membuatMyProjectTests.xctest
bundel uji. Kumpulan uji yang berbeda ini memiliki jalur yang berbeda . Juga, kumpulan uji yang berbeda mungkin memiliki beberapa struktur direktori internal dan perbedaan konten .Dalam kedua kasus tersebut,
.bundlePath
dan.bundleURL
akan mengembalikan jalur bundel pengujian yang saat ini sedang dijalankan di macOS. Namun,Bundle
saat ini tidak diterapkan untuk Ubuntu Linux.Juga, baris perintah
swift build
danswift test
saat ini tidak menyediakan mekanisme untuk menyalin sumber daya.Namun, dengan beberapa upaya, dimungkinkan untuk mengatur proses untuk menggunakan Swift Package Manger dengan sumber daya di macOS Xcode, baris perintah macOS, dan lingkungan baris perintah Ubuntu. Salah satu contoh dapat ditemukan di sini: 004.4'2 SW Dev Swift Package Manager (SPM) Dengan Resources Qref
Lihat juga: Gunakan sumber daya dalam pengujian unit dengan Swift Package Manager
Manajer Paket Swift (SPM) 4.2
Package Manager Swift PackageDescription 4.2 memperkenalkan dukungan dependensi lokal .
Catatan: Saya perkirakan, tetapi belum diuji, bahwa sesuatu seperti yang berikut ini dimungkinkan dengan SPM 4.2:
sumber
Dengan Swift 3, sintaks
self.dynamicType
telah ditinggalkan, gunakan ini sebagai gantinyaatau
sumber
Konfirmasikan bahwa sumber daya ditambahkan ke target pengujian.
sumber
jika Anda memiliki banyak target dalam proyek Anda maka Anda perlu menambahkan sumber daya di antara berbagai target yang tersedia di Keanggotaan Target dan Anda mungkin perlu beralih di antara Target yang berbeda sebagai 3 langkah yang ditunjukkan pada gambar di bawah ini
sumber
Saya harus memastikan bahwa kotak centang Pengujian Umum ini ditetapkan
sumber