Mocking Berasaskan Protokol dan Suntikan Kebergantungan
Suntik pengganti ujian melalui protokol tanpa rangka kerja mocking pihak ketiga.
Mocking Berasaskan Protokol dan Suntikan Kebergantungan ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.
Mengapa Mock Berasaskan Protokol
Penggunaan protokol sebagai titik sambungan membolehkan anda menggantikan pelaksanaan sebenar dengan pengganti ujian tanpa mengubah kod produksi.
protocol NetworkService {
func fetch(url: URL) async throws -> Data
}
class RealNetworkService: NetworkService { /* URLSession */ }
class MockNetworkService: NetworkService { /* returns fixtures */ }Menentukan Protokol
Ekstrak protokol daripada kebergantungan anda, yang mengandungi hanya kaedah yang diperlukan oleh kelas anda.
protocol UserRepository {
func getUser(id: Int) async throws -> User
func saveUser(_ user: User) async throws
}Menyuntik melalui Pemula
Hantar kebergantungan melalui pemula supaya ujian boleh membekalkan mock.
class ProfileViewModel {
private let repo: UserRepository
init(repo: UserRepository = RealUserRepository()) {
self.repo = repo
}
}Menulis mock
Laksanakan protokol dengan keadaan yang boleh dikawal: rekodkan panggilan dan kembalikan nilai tiruan.
class MockUserRepo: UserRepository {
var fetchedIds: [Int] = []
var stubbedUser: User = User(id: 1, name: "Test")
func getUser(id: Int) async throws -> User {
fetchedIds.append(id)
return stubbedUser
}
func saveUser(_ user: User) async throws {}
}Nilai Pulangan Tiruan
Konfigurasikan nilai tiruan sebelum ujian untuk mengawal perkara yang dikembalikan oleh mock, lalu mensimulasikan senario yang berbeza.
let mock = MockUserRepo()
mock.stubbedUser = User(id: 42, name: "Alice")
let vm = ProfileViewModel(repo: mock)
await vm.loadProfile(id: 42)
XCTAssertEqual(vm.userName, "Alice")Mengesahkan Interaksi
Selepas menjalankan sistem yang diuji, sahkan bahawa mock dipanggil dengan argumen yang dijangka.
XCTAssertEqual(mock.fetchedIds, [42], "Should fetch user 42 exactly once")Simulasi Ralat
Lemparkan ralat daripada mock untuk menguji laluan pengendalian ralat dalam kod produksi.
class FailingRepo: UserRepository {
func getUser(id: Int) async throws -> User { throw NetworkError.notFound }
func saveUser(_ user: User) async throws { throw NetworkError.serverError(500) }
}Suntikan Sifat
Sebagai alternatif, dedahkan kebergantungan sebagai sifat yang boleh ditetapkan untuk penggantian yang lebih mudah dalam ujian.
class OrderService {
var paymentGateway: PaymentGateway = StripeGateway()
}
let service = OrderService()
service.paymentGateway = MockPaymentGateway()Suntikan @Environment / @EnvironmentObject
Aplikasi SwiftUI menyuntik kebergantungan melalui persekitaran, menjadikan paparan boleh diuji dengan membekalkan objek persekitaran mock.
let mockStore = MockCartStore()
let view = CartView().environmentObject(mockStore)Mengelakkan Mock Berlebihan
Gunakan mock hanya untuk kebergantungan langsung; gunakan rakan kerjasama sebenar apabila hasilnya deterministik dan pantas.
// OK to use real DateFormatter in tests — it's deterministic
// Mock URLSession — network I/O is slow and non-deterministicGubahan Protokol untuk Antara Muka yang Lebih Sempit
Gunakan protokol yang lebih kecil dan berfokus (Prinsip Pengasingan Antara Muka) supaya mock hanya melaksanakan perkara yang diperlukan.
protocol Readable { func read() async throws -> [Item] }
protocol Writable { func write(_ item: Item) async throws }
typealias ReadWrite = Readable & WritableSemakan Pantas
Apakah manfaat utama menyuntik kebergantungan melalui protokol berbanding jenis konkrit?
Ringkasan Pelajaran
Tentukan titik sambungan protokol untuk setiap kebergantungan. Suntik melalui pemula. Laksanakan mock yang merekodkan panggilan dan mengembalikan nilai tiruan. Simulasikan ralat dengan mock yang boleh melempar ralat. Sahkan interaksi menggunakan XCTAssertEqual pada tatasusunan panggilan yang direkodkan.
Pelajari Swift dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 122
- Pelajaran
- 409
Soalan Lazim
Adakah pelajaran “Mocking Berasaskan Protokol dan Suntikan Kebergantungan” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Mocking Berasaskan Protokol dan Suntikan Kebergantungan”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Mocking Berasaskan Protokol dan Suntikan Kebergantungan”?
Suntik pengganti ujian melalui protokol tanpa rangka kerja mocking pihak ketiga. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Mocking Berasaskan Protokol dan Suntikan Kebergantungan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Persediaan, Pembersihan dan Kaedah Ujian XCTestCase
- Keluarga XCTAssert dan Penegasan yang Melontarkan Ralat
- Mocking Berasaskan Protokol dan Suntikan Kebergantungan
- Ujian Async dan Pengukuran Prestasi