0Pricing
Swift Academy · Ders

Görünüm Modellerini Sınama

Sunum mantığını yalıtılmış birim sınamalarıyla sınayın.

Görünüm Modellerini Sınama, 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.

ViewModel'leri Neden Sınamalısınız?

ViewModel, sunum mantığınızı barındırır ve bu nedenle birim sınaması yapılacak en değerli katmandır. UIKit veya SwiftUI bağımlılığı olmadığı için onu yalıtılmış olarak, hızlı ve deterministik biçimde sınayabilirsiniz.

Tasarım Gereği Sınanabilir

İyi oluşturulmuş bir ViewModel, bağımlılıklarını başlatıcısı aracılığıyla alır. Bu sayede sınamalar sahte nesneler kullanabilir.

final class WeatherViewModel: ObservableObject {
    @Published var temperatureText = ""
    private let service: WeatherService

    init(service: WeatherService) {
        self.service = service
    }
}

Bağımlılık Enjeksiyonu

Somut bağımlılıkları bir protokolün arkasına gizleyin. ViewModel soyutlamaya bağımlı olur; böylece sınamalar bir mock enjekte edebilir.

protocol WeatherService {
    func fetchTemperature() async throws -> Double
}

Mock Yazma

Bir mock protokole uyar ve önceden hazırlanmış veriler döndürür. ViewModel'in tam olarak ne göreceğini denetlemenizi sağlar.

final class MockWeatherService: WeatherService {
    var stubbedTemperature: Double = 20
    var didCallFetch = false

    func fetchTemperature() async throws -> Double {
        didCallFetch = true
        return stubbedTemperature
    }
}

Temel Birim Sınaması

Mock enjekte edildiğinde, ViewModel'in verileri doğru biçimde dönüştürdüğünü doğrularsınız.

func testFormatsTemperature() async {
    let mock = MockWeatherService()
    mock.stubbedTemperature = 25
    let vm = WeatherViewModel(service: mock)

    await vm.load()

    XCTAssertEqual(vm.temperatureText, "25 C")
}

Durum Geçişlerini Sınama

ViewModel'ler genellikle bir durum numaralandırması sunar. Bu durumu oluşturan girdileri sağlayarak her dalı sınayın.

func testLoadingThenLoaded() async {
    let vm = FeedViewModel(service: MockFeedService())
    XCTAssertEqual(vm.state, .loading)

    await vm.load()

    XCTAssertEqual(vm.state, .loaded(["A", "B"]))
}

Hata Yollarını Sınama

ViewModel'in hataları düzgün biçimde ele aldığını ve bir hata durumu sunduğunu doğrulamak için mock'un hata vermesini sağlayın.

final class FailingService: WeatherService {
    func fetchTemperature() async throws -> Double {
        throw URLError(.notConnectedToInternet)
    }
}

func testShowsErrorOnFailure() async {
    let vm = WeatherViewModel(service: FailingService())
    await vm.load()
    XCTAssertEqual(vm.state, .error)
}

Etkileşimleri Doğrulama

Bazen yalnızca sonuçla değil, bir bağımlılığın çağrılmış olmasıyla da ilgilenirsiniz. Mock üzerindeki casus işaretleri, davranışı doğrulamanızı sağlar.

func testFetchIsCalled() async {
    let mock = MockWeatherService()
    let vm = WeatherViewModel(service: mock)
    await vm.load()
    XCTAssertTrue(mock.didCallFetch)
}

@Published Çıktısını Sınama

Yayınlanan değerleri yakalamak ve diziyi doğrulamak için Combine ile bir @Published özelliğine abone olabilirsiniz.

var received: [String] = []
let cancellable = vm.$temperatureText.sink { received.append($0) }

await vm.load()

XCTAssertEqual(received.last, "25 C")
cancellable.cancel()

Sınamaları Hızlı Tutma

Mock'lar anında yanıt verdiği ve gerçek ağ kullanılmadığı için ViewModel sınamaları milisaniyeler içinde çalışır. Gerçek zamanlayıcılardan ve URLSession'dan kaçının; saatler ve zamanlayıcılar için de sahte nesneler enjekte edin.

En İyi Uygulamalar

Etkili ViewModel sınamaları:

  • Tüm bağımlılıkları protokoller aracılığıyla enjekte eder
  • Her sınama yönteminde tek bir davranışı sınar
  • Başarılı, boş ve hata yollarını kapsar
  • Görünümün okuyacağı yayımlanmış çıktıları doğrular

Hızlı Kontrol

ViewModel sınaması bilginizi sınayın.

Özet

ViewModel'leri yalıtılmış olarak birim sınamasından geçirmeyi öğrendiniz:

  • Bağımlılıkları protokollerin arkasına enjekte edin
  • Girdileri denetlemek ve çağrıları izlemek için mock'lar kullanın
  • Başarılı, hata ve boş durumları kapsayın
  • @Published çıktılarıyla durum geçişlerini doğrulayın

Sınanabilir ViewModel'ler, MVVM'in sorumlulukları ayırmasının sonucudur.

Sıkça Sorulan Sorular

“Görünüm Modellerini Sınama” dersi ücretsiz mi?

Evet — “Görünüm Modellerini Sınama” 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.

“Görünüm Modellerini Sınama” dersinde ne öğreneceğim?

Sunum mantığını yalıtılmış birim sınamalarıyla sınayın. 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.

“Görünüm Modellerini Sınama” 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. MVVM Deseni
  2. Görünüm Modellerini Görünümlere Bağlama
  3. Coordinator Deseni
  4. Görünüm Modellerini Sınama
← Swift Academy Sayfasına Dön