0Pricing
Swift Academy · Pelajaran

Menguji View Model

Uji unit logika presentasi secara terisolasi.

Menguji View Model 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.

Mengapa Menguji ViewModels?

ViewModel menyimpan logika presentasi Anda sehingga menjadi lapisan yang paling bernilai untuk diuji sebagai unit. Karena tidak bergantung pada UIKit atau SwiftUI, Anda dapat mengujinya secara terisolasi dengan cepat dan deterministik.

Dirancang agar Dapat Diuji

ViewModel yang dibangun dengan baik menerima dependensinya melalui penginisialisasi. Dengan demikian, pengujian dapat menggantinya dengan objek palsu.

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

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

Injeksi Dependensi

Sembunyikan dependensi konkret di balik sebuah protokol. ViewModel bergantung pada abstraksi sehingga pengujian dapat menyuntikkan mock.

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

Membuat Mock

Sebuah mock mematuhi protokol dan mengembalikan data yang telah ditentukan. Mock memungkinkan Anda mengendalikan dengan tepat apa yang dilihat ViewModel.

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

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

Pengujian Unit Dasar

Setelah mock disuntikkan, Anda memverifikasi bahwa ViewModel mengubah data dengan benar.

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

    await vm.load()

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

Menguji Transisi Status

ViewModels sering mengekspos enumerasi status. Uji setiap cabang dengan memberikan masukan yang menghasilkan status tersebut.

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

    await vm.load()

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

Menguji Jalur Kesalahan

Buat mock melemparkan kesalahan untuk memverifikasi bahwa ViewModel menangani kegagalan dengan baik dan menampilkan status kesalahan.

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

Memverifikasi Interaksi

Terkadang yang penting bagi Anda adalah bahwa dependensi dipanggil, bukan sekadar hasilnya. Penanda pengawas pada mock memungkinkan Anda memverifikasi perilaku.

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

Menguji Keluaran @Published

Anda dapat berlangganan ke properti @Published dengan Combine untuk menangkap nilai yang dipancarkan dan memverifikasi urutannya.

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

await vm.load()

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

Menjaga Pengujian Tetap Cepat

Karena mock mengembalikan hasil secara langsung dan tidak ada jaringan sungguhan, pengujian ViewModel berjalan dalam milliseconds. Hindari pengatur waktu dan URLSession sungguhan—suntikkan juga objek palsu untuk jam dan penjadwal.

Praktik Terbaik

Pengujian ViewModel yang efektif:

  • Suntikkan semua dependensi melalui protokol
  • Uji satu perilaku dalam setiap metode pengujian
  • Uji jalur berhasil, kosong, dan kesalahan
  • Verifikasi keluaran yang dipublikasikan dan akan dibaca oleh tampilan

Uji Singkat

Ujilah pengetahuan Anda tentang pengujian ViewModel.

Ringkasan

Anda telah mempelajari cara menguji ViewModels sebagai unit secara terisolasi:

  • Suntikkan dependensi di balik protokol
  • Gunakan mock untuk mengendalikan masukan dan mengawasi pemanggilan
  • Uji status berhasil, kesalahan, dan kosong
  • Verifikasi keluaran @Published dan transisi status

ViewModel yang dapat diuji adalah hasil dari pemisahan tanggung jawab dalam MVVM.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menguji View Model” gratis?

Ya — teks lengkap “Menguji View Model” 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 “Menguji View Model”?

Uji unit logika presentasi secara terisolasi. 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 “Menguji View Model” 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. Pola MVVM
  2. Menghubungkan View Model ke View
  3. Pola Coordinator
  4. Menguji View Model
← Kembali ke Swift Academy