Saya mencoba menyiapkan Pengujian Unit untuk proyek saya. Ini adalah aplikasi Objective-C yang sudah ada, yang baru-baru ini saya tambahkan satu kelas Swift. Saya telah menyiapkan file 'MyProject-Swift.h' dan Swift Bridging (keduanya 'MyProject' dan 'MyProjectTest') dan saya dapat membangun dan menjalankan aplikasi dengan baik menggunakan kode Objective-C dan Swift.
Namun, sekarang saya ingin menjalankan beberapa Pengujian Unit di kelas Swift baru. Saya menyiapkan file pengujian saya dan terlihat seperti berikut:
MySwiftClassTests.swift:
import UIKit
import XCTest
import MyProject
class MySwiftClassTests: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testExample() {
// This is an example of a functional test case.
XCTAssert(true, "Pass")
}
func testPerformanceExample() {
// This is an example of a performance test case.
self.measureBlock() {
// Put the code you want to measure the time of here.
}
}
}
Saya mendapatkan kesalahan ini saat menjalankan aplikasi sebagai Test:
'MyProject-Swift.h' file not found
Saya tidak yakin mengapa ini terjadi hanya ketika mencoba menjalankan Tes. Ada saran?
ios
unit-testing
swift
header
JimmyJammed
sumber
sumber
Jawaban:
File "MyProject-Swift.h" dibuat di jalur berikut:
"$(TARGET_TEMP_DIR)/../$(PROJECT_NAME).build/DerivedSources"
Saya akhirnya menambahkan ini ke Jalur Pencarian Header untuk target Tes Unit saya.
Juga seperti yang ditunjukkan @hyouuu tentang menjadi masalah yang diketahui, semoga Apple akan memberikan solusi yang baik pada akhirnya. Sampai saya yakin kita perlu menggunakan solusi di atas.
https://developer.apple.com/library/content/documentation/Xcode/Conceptual/RN-Xcode-Archive/Chapters/xc6_release_notes.html
sumber
<Product Name> Tests
dengan target pengujian Anda. Namun solusi ini tidak berfungsi jika nama produk Anda memiliki spasi. Lihat jawaban saya di bawah ini untuk solusinya.$(TARGET_TEMP_DIR)
tidak berhasil. Saya akhirnya menggunakan$CONFIGURATION_TEMP_DIR/{myTargetName}.build/DerivedSources
Terima kasih kepada @gagarwal untuk memecahkan masalah ini. Dalam kasus kami, nama produk memiliki spasi, yang diciutkan
$PROJECT_NAME
, jadi saya harus membuat kode keras. Selain itu, dengan menggunakan$CONFIGURATION_TEMP_DIR
alih-alih$TARGET_TEMP_DIR
, Anda dapat menghapus direktori induk (../
) dari jalur. Jadi solusinya adalah dengan menambahkan yang berikut ini ke Jalur Pencarian Header di target pengujian Anda:Atau, jika produk Anda tidak mengandung spasi:
sumber
Lihat di catatan rilis Xcode 6.1, bahwa ini adalah masalah yang diketahui ... tanda ... Cari "-swift.h" di catatan rilis https://developer.apple.com/library/content/documentation/Xcode /Conceptual/RN-Xcode-Archive/Chapters/xc6_release_notes.html
Silakan lihat solusi @ gagarwal di bawah ini yang BEKERJA!
sumber
Saya memiliki masalah serupa dengan Anda, saya pikir; inilah pengaturan saya.
Saya memiliki objek yang ditentukan di Swift:
Kelas ini kemudian digunakan dalam penginisialisasi objek Objective-C:
Ini membuat pengujian unit saya
Bar
tidak dapat dikompilasi, karenaMyProject-Swift.h
header tidak nyata dan target pengujian unit tidak dapat melihatnya. Catatan rilis yang dibagikan oleh @hyouuu ada benarnya - tetapi saya tidak menguji kelas Swift, saya sedang menguji kelas Objective-C!Saya dapat memperbaiki ini dengan mengubah file header untuk
Bar
menggunakan referensi kelas maju sebagai gantinya:Saya kemudian dimasukkan
MyProject-Swift.h
dalamBar.m
, dan semuanya bekerja - tes saya Objective-C benda ditulis di Objective-C disusun dengan baik dan terus berjalan, dan aku bisa menulis tes baru untuk Swift objek di Swift.Semoga ini membantu!
sumber
Foo
API di dalamBar.m
.MyProject-Swift.h
dalam.m
file membuat Anda.Setelah saya mencoba semua yang dapat saya temukan tentang topik tersebut, hal yang berhasil bagi saya sebenarnya adalah menjalankan aplikasi meskipun masih menampilkan kesalahan 'ModuleName-Swift.h file not found'.
Itu hilang dan aplikasi saya berfungsi dengan baik. Saya kira saya seharusnya mempertimbangkan itu sebelumnya ... Kesalahan terus muncul , tetapi setelah menjalankan aplikasi itu selalu hilang lagi. Jadi masalah ini tidak benar-benar terpecahkan untuk saya, tetapi saya dapat terus mengerjakan topik lain untuk saat ini ...
sumber
Sederhana
telah melakukan pekerjaan untuk saya.
sumber
Anehnya, saya melihat kesalahan yang sama, tetapi hanya saat menargetkan perangkat (bukan simulator). Sebelum menjalankan pengujian, saya akan melihat tanda seru merah di sebelah pernyataan impor untuk "MyProjectNameTests-Swift.h".
Namun, lucunya, jika saya tetap melanjutkan dan menjalankan pengujian (terlepas dari kesalahan build yang jelas ini), maka selama fase build yang terjadi setelahnya, XCode sebenarnya menghasilkan file "MyProjectNameTests-Swift.h", dan pengujian berjalan dengan baik!
Jadi, setidaknya dalam kasus saya, tidak diperlukan solusi lain di sini, jelas, meskipun saya yakin mereka juga berhasil.
Saya juga harus mencatat bahwa saya menghapus direktori DerivedData saya sebelum ini, jadi mungkin itu langkah yang juga patut dicoba.
sumber
mySwiftClassTests
(dan kelas swift lainnya yang ingin Anda gunakan di objektif-c) perlu ditandai@objc
:sumber
Saya tidak bisa membuatnya berfungsi dengan menambahkan jalur file yang disebutkan oleh jawaban lain, tetapi saya menyadari file yang dikeluhkannya bahkan tidak diuji. Saya hanya harus menghapusnya dari target pengujian menggunakan Bar Sisi Utilitas Kanan.
sumber
Menambahkan file .swift ke target itu akan memperbaiki masalah di dalamnya.
sumber