0Pricing
Swift Academy · Pelajaran

Membuat Mock Dependensi dalam Pengujian

Ganti implementasi nyata dengan pengganti untuk pengujian.

Membuat Mock Dependensi dalam Pengujian adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.

Membuat Tiruan Dependensi dalam Pengujian

Tiruan adalah implementasi palsu dari suatu dependensi yang digunakan dalam pengujian. Karena kita menginjeksi protokol, kita dapat menyediakan tiruan sebagai pengganti objek pendukung nyata.

Protokol untuk Ditirukan

Mulailah dari protokol yang menjelaskan dependensi tersebut. Tipe nyata dan tiruan sama-sama mematuhinya.

protocol UserStore {
    func name(for id: Int) -> String
}
struct RealStore: UserStore {
    func name(for id: Int) -> String { "User-\(id)" }
}
print(RealStore().name(for: 5))

Menulis Tiruan

Tiruan mematuhi protokol tetapi mengembalikan nilai yang telah ditentukan, sehingga tidak perlu mengakses jaringan atau disk nyata.

protocol UserStore { func name(for id: Int) -> String }
struct MockStore: UserStore {
    func name(for id: Int) -> String { "Mock" }
}
print(MockStore().name(for: 99))

Menginjeksi Tiruan

Teruskan tiruan kepada sistem yang diuji melalui penginisialisasinya. Kode yang diuji tidak dapat membedakan keduanya.

protocol UserStore { func name(for id: Int) -> String }
struct MockStore: UserStore { func name(for id: Int) -> String { "Mock" } }
struct Profile {
    let store: UserStore
    func title(_ id: Int) -> String { "Hello, " + store.name(for: id) }
}
print(Profile(store: MockStore()).title(1))

Mencatat Pemanggilan

Tiruan dapat mencatat cara penggunaannya, sehingga pengujian dapat memverifikasi bahwa dependensi dipanggil dengan benar.

protocol Analytics { func track(_ e: String) }
class SpyAnalytics: Analytics {
    var events: [String] = []
    func track(_ e: String) { events.append(e) }
}
let spy = SpyAnalytics()
spy.track("open")
spy.track("buy")
print(spy.events)

Memverifikasi Perilaku

Setelah menjalankan kode, periksa data yang tercatat. Di sini kita memverifikasi bahwa peristiwa yang tepat telah dipicu.

protocol Analytics { func track(_ e: String) }
class Spy: Analytics { var last = ""; func track(_ e: String) { last = e } }
struct Checkout { let analytics: Analytics; func pay() { analytics.track("paid") } }
let spy = Spy()
Checkout(analytics: spy).pay()
print(spy.last == "paid")

Menetapkan Nilai Kembalian

Tiruan nilai mengembalikan nilai yang telah ditentukan agar Anda dapat menguji cara kode merespons input tertentu.

protocol Clock { func hour() -> Int }
struct StubClock: Clock { let value: Int; func hour() -> Int { value } }
struct Greeter { let clock: Clock; func greet() -> String { clock.hour() < 12 ? "AM" : "PM" } }
print(Greeter(clock: StubClock(value: 9)).greet())
print(Greeter(clock: StubClock(value: 18)).greet())

Mensimulasikan Kegagalan

Tiruan dapat mensimulasikan kondisi kesalahan yang sulit dipicu dengan dependensi nyata, sehingga meningkatkan cakupan pengujian.

protocol Loader { func load() -> Int? }
struct FailingLoader: Loader { func load() -> Int? { nil } }
struct VM { let loader: Loader; func status() -> String { loader.load() == nil ? "error" : "ok" } }
print(VM(loader: FailingLoader()).status())

Pengujian Deterministik

Karena tiruan mengembalikan nilai tetap, pengujian berlangsung cepat dan deterministik, tanpa ketidakstabilan dari layanan nyata.

protocol Random { func next() -> Int }
struct FixedRandom: Random { func next() -> Int { 42 } }
struct Game { let rng: Random; func roll() -> Int { rng.next() } }
print(Game(rng: FixedRandom()).roll())

Tanpa Kerangka Pengujian di Sini

Dalam proyek nyata, pemeriksaan ini berada dalam pernyataan pengujian XCTest. Pola injeksinya sama; hanya sintaks pernyataannya yang berbeda.

protocol Calc { func add(_ a: Int, _ b: Int) -> Int }
struct RealCalc: Calc { func add(_ a: Int, _ b: Int) -> Int { a + b } }
struct MockCalc: Calc { func add(_ a: Int, _ b: Int) -> Int { 0 } }
print(RealCalc().add(2, 2))
print(MockCalc().add(2, 2))

Siklus Lengkap

Tentukan protokol, tulis implementasi nyata dan tiruan yang mematuhinya, injeksikan tiruan, jalankan kode, lalu lakukan verifikasi. DI memungkinkan setiap langkah tersebut.

protocol Repo { func count() -> Int }
struct MockRepo: Repo { func count() -> Int { 3 } }
struct Stats { let repo: Repo; func total() -> Int { repo.count() * 2 } }
print(Stats(repo: MockRepo()).total())

Pemeriksaan Singkat

Apa yang memungkinkan pembuatan tiruan dependensi dalam pendekatan ini?

Rangkuman

Tiruan mematuhi protokol yang diinjeksi dan mengembalikan nilai yang telah ditentukan, mencatat pemanggilan, atau mensimulasikan kegagalan. Menginjeksi tiruan menghasilkan pengujian yang cepat dan deterministik. Siklusnya adalah: tentukan protokol, tulis implementasi nyata dan tiruan yang mematuhinya, injeksikan, jalankan, lalu verifikasi. Kursus DI telah selesai.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membuat Mock Dependensi dalam Pengujian” gratis?

Ya — teks lengkap “Membuat Mock Dependensi dalam Pengujian” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Membuat Mock Dependensi dalam Pengujian”?

Ganti implementasi nyata dengan pengganti untuk pengujian. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Membuat Mock Dependensi dalam Pengujian” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa Injeksi Dependensi
  2. Injeksi Konstruktor
  3. Abstraksi Berbasis Protocol
  4. Membuat Mock Dependensi dalam Pengujian
← Kembali ke Swift Academy