Sınamalarda Bağımlılıkları Taklit Etme
Gerçek gerçekleştirimleri sınama amaçlı benzerleriyle değiştirin.
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.
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
- Bağımlılık Enjeksiyonu Neden Kullanılır
- Kurucu Enjeksiyonu
- Protokol Tabanlı Soyutlamalar
- Sınamalarda Bağımlılıkları Taklit Etme