View modelien testaaminen
Testaa esityslogiikkaa yksikkötesteillä erillään.
View modelien testaaminen on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.
Miksi ViewModeleita testataan?
ViewModel sisältää esityslogiikan, joten se on arvokkain yksikkötestattava kerros. Koska sillä ei ole UIKit- tai SwiftUI-riippuvuutta, sitä voi testata erillään nopeasti ja deterministisesti.
Testattavuus suunnittelun lähtökohtana
Hyvin rakennettu ViewModel saa riippuvuutensa alustajansa kautta. Näin testit voivat korvata ne feikeillä.
final class WeatherViewModel: ObservableObject {
@Published var temperatureText = ""
private let service: WeatherService
init(service: WeatherService) {
self.service = service
}
}Riippuvuuksien injektointi
Piilota konkreettiset riippuvuudet protokollan taakse. ViewModel riippuu abstraktiosta, joten testit voivat injektoida mockin.
protocol WeatherService {
func fetchTemperature() async throws -> Double
}Mockin kirjoittaminen
Mocki toteuttaa protokollan ja palauttaa ennalta määritettyä dataa. Sen avulla voit hallita tarkasti sitä, mitä ViewModel näkee.
final class MockWeatherService: WeatherService {
var stubbedTemperature: Double = 20
var didCallFetch = false
func fetchTemperature() async throws -> Double {
didCallFetch = true
return stubbedTemperature
}
}Perusyksikkötesti
Kun mocki on injektoitu, varmistat, että ViewModel muuntaa datan oikein.
func testFormatsTemperature() async {
let mock = MockWeatherService()
mock.stubbedTemperature = 25
let vm = WeatherViewModel(service: mock)
await vm.load()
XCTAssertEqual(vm.temperatureText, "25 C")
}Tilasiirtymien testaaminen
ViewModelit paljastavat usein tilaenumin. Testaa jokainen haara tuottamalla syötteet, jotka johtavat siihen.
func testLoadingThenLoaded() async {
let vm = FeedViewModel(service: MockFeedService())
XCTAssertEqual(vm.state, .loading)
await vm.load()
XCTAssertEqual(vm.state, .loaded(["A", "B"]))
}Virhepolkujen testaaminen
Aseta mocki heittämään virhe ja varmista, että ViewModel käsittelee virheet hallitusti ja tuo virhetilan näkyviin.
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)
}Vuorovaikutusten varmistaminen
Joskus on tärkeää varmistaa, että riippuvuutta kutsuttiin, eikä vain tarkistaa tulosta. Mockin vakoilulippujen avulla voit varmistaa toiminnan.
func testFetchIsCalled() async {
let mock = MockWeatherService()
let vm = WeatherViewModel(service: mock)
await vm.load()
XCTAssertTrue(mock.didCallFetch)
}@Published-tulosteen testaaminen
Voit tilata @Published-ominaisuutta Combinella, kerätä lähetetyt arvot ja varmistaa niiden järjestyksen.
var received: [String] = []
let cancellable = vm.$temperatureText.sink { received.append($0) }
await vm.load()
XCTAssertEqual(received.last, "25 C")
cancellable.cancel()Testien pitäminen nopeina
Koska mockit palauttavat tulokset välittömästi eikä oikeaa verkkoa käytetä, ViewModel-testit suoritetaan millisekunneissa. Vältä oikeita ajastimia ja URLSessionia — injektoi feikit myös kelloille ja ajastimille.
Parhaat käytännöt
Tehokkaissa ViewModel-testeissä:
- Injektoidaan kaikki riippuvuudet protokollien kautta
- Testataan yksi toiminta kutakin testimetodia kohden
- Katetaan onnistumis-, tyhjä- ja virhepolut
- Varmistetaan ne julkaistut tulokset, joita näkymä lukee
Pikatesti
Testaa tietosi ViewModelien testaamisesta.
Kertaus
Opit testaamaan ViewModelit yksikkötesteillä erillään muusta sovelluksesta:
- Injektoi riippuvuudet protokollien taakse
- Käytä mockeja syötteiden hallintaan ja kutsujen tarkkailuun
- Kat a onnistumis-, virhe- ja tyhjät tilat
- Varmista
@Published-tulosteet ja tilasiirtymät
Testattavat ViewModelit ovat MVVM:n vastuiden erottelun tärkein hyöty.
Opi Swift tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 122
- Oppitunnit
- 409
Usein kysytyt kysymykset
Onko oppitunti ”View modelien testaaminen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “View modelien testaaminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”View modelien testaaminen”?
Testaa esityslogiikkaa yksikkötesteillä erillään. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”View modelien testaaminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?
Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- MVVM-kuvio
- View modelien sitominen näkymiin
- Coordinator-kuvio
- View modelien testaaminen