Pertanyaan Mengeluarkan pengujian dan menggunakan Cocoapods dalam proyek Swift


Saya sedang menulis aplikasi di Swift, menggunakan XCode 6 Beta-6. Saya menggunakan Cocoapods dan saya membuat beberapa tes unit.

Masalahnya adalah yang satu ini: ternyata tidak mungkin memiliki proyek yang berisi:

1) Proyek ditulis dalam Swift

2) Beberapa pod dipasang menggunakan cocoapods

3) File header jembatan Objective-C yang mengimpor beberapa pod

4) Tes unit

Ini terdengar aneh, tetapi ikuti langkah saya: setelah berlari pod install, buat header jembatan Objective-C dan impor satu pod: semuanya berfungsi. Sekarang tulis beberapa tes: untuk menguji kelas Anda sendiri, Anda harus mengimpor modul yang disebut "sebagai proyek Anda" (atau lebih baik, "sebagai target utama"): dalam proyek "MyAwesomeApp" saya harus menulis import MyAwesomeApp dalam file tes saya.

Sayangnya, pada langkah ini XCode tidak dapat dikompilasi: di saya import MyAwesomeApp Sejalan dengan kesalahan "Gagal mengimpor header bridging '/path/to/MyAwesomeApp/MyAwesomeApp/MyAwesomeApp-Bridging-Header.h";
dan kesalahan "file xxx.h tidak ditemukan" muncul di file Bridging-Header, tidak termasuk kemungkinan untuk mengimpor pod.

Juga, jika saya tidak mengimpor pod dalam file jembatan Obj-c, proyek akan dikompilasi baik.

Terlihat bahwa ada konflik yang mengimport kedua Objective-C Bridge Header (dengan file Objective-C yang diambil dari sub-proyek yang berbeda di ruang kerja) dan "modul utama" yang digunakan untuk pengujian.

Apakah Anda tahu jika ada solusi? Apa yang saya rindukan? Terima kasih

CATATAN: Sebagai solusi, saya dapat mengimpor pod di Objective-C Bridge Header, dan, daripada memasukkan modul utama dalam pengujian saya, tambahkan semua kelas yang ingin saya uji dalam target "uji" saya. Ini akan bekerja, tetapi itu bukan solusi yang paling bersih (saya pikir)


32
2017-08-25 22:19


asal


Jawaban:


Jika Anda melihat pada Pengaturan Build target utama Anda, Anda akan melihat bahwa ada banyak direktori yang terdaftar untuk pengaturan "Header Search Paths".

Anda juga perlu menyalin nilai-nilai tersebut di bawah target uji coba, atau Anda dapat mencoba dan memodifikasi Podfile Anda untuk memasukkan target utama Anda dan menguji dan menjalankan kembali install:

platform :ios, '7.0' 
link_with 'mainapp', 'mainappTests'
...

Juga jagalah jalur header lain yang mungkin diperlukan dan tidak terkait dengan CocoaPods.

Dan jangan lupa bahwa kelas Anda harus memiliki metode publik di mana pun Anda ingin menguji unit mereka.

Semoga ini membantu.


32
2017-08-28 11:33



Mungkin Anda telah mengonfigurasi pengaturan "Objective-C Bridging Header" di tingkat Proyek, sehingga target "Uji" mewarisi nilai itu dan mungkin target "Uji" ini tidak terkait dengan Cocoapods.

Menggunakan link_with seperti @sergio menyarankan atau setel konfigurasi "Pods * .debug / release" untuk target "Test" di "Project-> Info-> Configuration".


7
2017-10-31 10:43



Selain itu link_with perintah di Podfile saya saya harus mengimpor modul proyek utama saya di file tes. Dengan cara ini kelas dan metode tidak harus publik.

Perhatikan yang spesial @testable annotation

@testable import my_tutorial_app

Juga nama proyek utama saya memiliki karakter non-alfanumerik di dalamnya, saya harus menggantinya dengan garis bawah _


0
2017-12-26 01:30