Protokol Tabanlı Sahte Nesne Kullanımı ve Bağımlılık Ekleme
Üçüncü taraf sahte nesne çerçeveleri olmadan protokoller aracılığıyla test ikizleri ekleyin.
Protokol Tabanlı Sahte Nesne Kullanımı ve Bağımlılık Ekleme, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 3. 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.
Protokol Tabanlı Sahteleme Neden Kullanılır?
Protokolleri değişim noktası olarak kullanmak, üretim kodunu değiştirmeden gerçek uygulamaları sınama sahte nesneleriyle değiştirmenizi sağlar.
protocol NetworkService {
func fetch(url: URL) async throws -> Data
}
class RealNetworkService: NetworkService { /* URLSession */ }
class MockNetworkService: NetworkService { /* returns fixtures */ }Protokolü Tanımlama
Bağımlılığınızdan, sınıfınızın ihtiyaç duyduğu yalnızca metotları içeren bir protokol çıkarın.
protocol UserRepository {
func getUser(id: Int) async throws -> User
func saveUser(_ user: User) async throws
}Başlatıcı Üzerinden Bağımlılık Ekleme
Sınamaların bir sahte nesne sağlayabilmesi için bağımlılığı başlatıcı üzerinden geçirin.
class ProfileViewModel {
private let repo: UserRepository
init(repo: UserRepository = RealUserRepository()) {
self.repo = repo
}
}Sahte Nesne Yazma
Çağrıları kaydeden ve sahte değerler döndüren, denetlenebilir durum içeren bir protokol uygulaması yazın.
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 {}
}Sahte Dönüş Değerleri
Farklı senaryoları benzeterek sahte nesnenin döndüreceği değerleri denetlemek için sınamadan önce sahte değerleri yapılandırın.
let mock = MockUserRepo()
mock.stubbedUser = User(id: 42, name: "Alice")
let vm = ProfileViewModel(repo: mock)
await vm.loadProfile(id: 42)
XCTAssertEqual(vm.userName, "Alice")Etkileşimleri Doğrulama
Sınanan sistemi çalıştırdıktan sonra sahte nesnenin beklenen bağımsız değişkenlerle çağrıldığını onaylayın.
XCTAssertEqual(mock.fetchedIds, [42], "Should fetch user 42 exactly once")Hata Benzetimi
Üretim kodundaki hata işleme yollarını sınamak için sahte nesneden hatalar fırlatın.
class FailingRepo: UserRepository {
func getUser(id: Int) async throws -> User { throw NetworkError.notFound }
func saveUser(_ user: User) async throws { throw NetworkError.serverError(500) }
}Özellik Üzerinden Bağımlılık Ekleme
Başka bir seçenek olarak, sınamalarda daha kolay değiştirme yapmak için bağımlılığı değer atanabilen bir özellik olarak sunun.
class OrderService {
var paymentGateway: PaymentGateway = StripeGateway()
}
let service = OrderService()
service.paymentGateway = MockPaymentGateway()@Environment / @EnvironmentObject Enjeksiyonu
SwiftUI uygulamaları bağımlılıkları ortam üzerinden ekler; bu sayede sahte ortam nesneleri sağlayarak görünümleri sınanabilir hâle getirebilirsiniz.
let mockStore = MockCartStore()
let view = CartView().environmentObject(mockStore)Aşırı Sahtelemeden Kaçınma
Yalnızca doğrudan bağımlılıkları sahteleyin; belirleyici ve hızlı olduklarında gerçek işbirlikçileri kullanın.
// OK to use real DateFormatter in tests — it's deterministic
// Mock URLSession — network I/O is slow and non-deterministicDaha Dar Arayüzler için Protokol Birleştirmesi
Arayüz Ayırma İlkesi'ni uygulamak için daha küçük ve odaklanmış protokoller kullanın; böylece sahte nesneler yalnızca gerekenleri uygular.
protocol Readable { func read() async throws -> [Item] }
protocol Writable { func write(_ item: Item) async throws }
typealias ReadWrite = Readable & WritableHızlı Kontrol
Somut bir tür yerine bir protokol üzerinden bağımlılık eklemenin temel faydası nedir?
Ders Özeti
Her bağımlılık için bir protokol değişim noktası tanımlayın. Bağımlılığı başlatıcı üzerinden ekleyin. Çağrıları kaydeden ve sahte değerler döndüren sahte nesneler uygulayın. Hata fırlatan sahte nesnelerle hataları benzetin. Kaydedilen çağrı dizileri üzerinde XCTAssertEqual kullanarak etkileşimleri doğrulayın.
Sıkça Sorulan Sorular
“Protokol Tabanlı Sahte Nesne Kullanımı ve Bağımlılık Ekleme” dersi ücretsiz mi?
Evet — “Protokol Tabanlı Sahte Nesne Kullanımı ve Bağımlılık Ekleme” 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.
“Protokol Tabanlı Sahte Nesne Kullanımı ve Bağımlılık Ekleme” dersinde ne öğreneceğim?
Üçüncü taraf sahte nesne çerçeveleri olmadan protokoller aracılığıyla test ikizleri ekleyin. 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 3. dersidir.
“Protokol Tabanlı Sahte Nesne Kullanımı ve Bağımlılık Ekleme” 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
- XCTestCase Kurulumu, Temizleme ve Test Yöntemleri
- XCTAssert Ailesi ve Hata Fırlatan Doğrulamalar
- Protokol Tabanlı Sahte Nesne Kullanımı ve Bağımlılık Ekleme
- Eşzamansız Testler ve Başarım Ölçümü