Swift Academy · Ders

Sınamalarda Bağımlılıkları Taklit Etme

Gerçek gerçekleştirimleri sınama amaçlı benzerleriyle değiştirin.

4. ders / 413 adım

Sınamalarda Bağımlılıkları Taklit Etme, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

Sınamalarda Bağımlılıkları Taklit Etme

Taklit, sınamalarda kullanılan bir bağımlılığın sahte uygulamasıdır. Protokolleri enjekte ettiğimiz için gerçek işbirlikçi nesnenin yerine bir taklit sağlayabiliriz.

Taklit Edilecek Bir Protokol

Bağımlılığı açıklayan bir protokolle başlayınız. Gerçek tür ve taklit, bu protokole uyar.

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

Taklit Yazma

Bir taklit protokole uyar ancak gerçek ağ veya disk erişiminden kaçınmak için önceden hazırlanmış değerler döndürür.

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

Taklidi Enjekte Etme

Taklidi, başlatıcısı aracılığıyla sınanan sisteme geçiriniz. Sınanan kod aradaki farkı anlayamaz.

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))

Çağrıları Kaydetme

Bir taklit nasıl kullanıldığını kaydedebilir; böylece bir sınama, bağımlılığın doğru şekilde çağrıldığını doğrulayabilir.

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)

Davranışı Doğrulama

Kodu çalıştırdıktan sonra kaydedilen verileri denetleyiniz. Burada doğru olayın tetiklendiğini doğruluyoruz.

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")

Dönüş Değerlerini Önceden Belirleme

Bir sahte sağlayıcı, kodunuzun belirli girdilere nasıl tepki verdiğini sınayabilmeniz için önceden belirlenmiş değerler döndürür.

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())

Hatayı Benzeştirme

Taklitler, gerçek bağımlılıklarla tetiklenmesi zor olan hata durumlarını benzetebilir ve sınama kapsamını geliştirebilir.

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())

Sonuçları Değişmeyen Sınamalar

Taklitler sabit değerler döndürdüğü için sınamalar hızlı ve sonuçları değişmez olur; gerçek hizmetlerden kaynaklanan kararsızlıklar görülmez.

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())

Burada Sınama Çatısı Yok

Gerçek bir projede bu denetimler XCTest doğrulamaları içinde yer alır. Enjeksiyon modeli aynıdır; yalnızca doğrulama söz dizimi farklıdır.

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))

Tüm Döngü

Protokolü tanımlayınız, gerçek ve taklit uyumlu türleri yazınız, taklidi enjekte ediniz, kodu çalıştırınız ve doğrulayınız. DI her adımı mümkün kılar.

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())

Hızlı Denetim

Bu yaklaşımda bir bağımlılığı taklit etmeyi mümkün kılan nedir?

Özet

Bir taklit, enjekte edilen protokole uyar ve önceden hazırlanmış değerler döndürür, çağrıları kaydeder veya hataları benzetir. Taklidi enjekte etmek hızlı ve sonuçları değişmeyen sınamalar üretir. Döngü şöyledir: protokolü tanımla, gerçek ve taklit uyumlu türleri yaz, enjekte et, çalıştır ve doğrula. Böylece DI kursu tamamlanır.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Swift öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
122
Dersler
409

Sıkça Sorulan Sorular

“Sınamalarda Bağımlılıkları Taklit Etme” dersi ücretsiz mi?

Evet — “Sınamalarda Bağımlılıkları Taklit Etme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“Sınamalarda Bağımlılıkları Taklit Etme” dersinde ne öğreneceğim?

Gerçek gerçekleştirimleri sınama amaçlı benzerleriyle değiştirin. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Sınamalarda Bağımlılıkları Taklit Etme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Bağımlılık Enjeksiyonu Neden Kullanılır
  2. Kurucu Enjeksiyonu
  3. Protokol Tabanlı Soyutlamalar
  4. Sınamalarda Bağımlılıkları Taklit Etme
← Swift Academy Sayfasına Dön