Swift Academy · Leçon

Tester les modèles de vue

Testez unitairement la logique de présentation de manière isolée.

Leçon 4 sur 413 étapes

Tester les modèles de vue est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Pourquoi tester les ViewModels ?

Le ViewModel contient votre logique de présentation, ce qui en fait la couche la plus intéressante à tester unitairement. Comme il ne dépend ni de UIKit ni de SwiftUI, vous pouvez le tester en isolation, rapidement et de manière déterministe.

Testables dès la conception

Un ViewModel bien conçu reçoit ses dépendances dans son initialiseur. Les tests peuvent ainsi les remplacer par des doublures.

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

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

Injection de dépendances

Masquez les dépendances concrètes derrière un protocole. Le ViewModel dépend de l’abstraction, ce qui permet aux tests d’injecter un mock.

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

Écrire un mock

Un mock se conforme au protocole et renvoie des données prédéfinies. Il vous permet de contrôler exactement ce que voit le ViewModel.

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

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

Un test unitaire de base

Une fois le mock injecté, vous vérifiez que le ViewModel transforme correctement les données.

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

    await vm.load()

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

Tester les transitions d’état

Les ViewModels exposent souvent une énumération d’état. Testez chaque branche en fournissant les entrées qui la déclenchent.

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

    await vm.load()

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

Tester les chemins d’erreur

Faites lever une erreur au mock afin de vérifier que le ViewModel gère les échecs avec élégance et expose un état d’erreur.

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

Vérifier les interactions

Parfois, ce qui vous importe est qu’une dépendance ait été appelée, et pas seulement le résultat. Des indicateurs d’espionnage sur le mock vous permettent de vérifier ce comportement.

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

Tester la sortie de @Published

Vous pouvez vous abonner à une propriété @Published avec Combine pour capturer les valeurs émises et vérifier la séquence.

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

await vm.load()

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

Garder les tests rapides

Comme les mocks renvoient leurs résultats instantanément et qu’aucun réseau réel n’est utilisé, les tests des ViewModels s’exécutent en milliseconds. Évitez les minuteurs réels et URLSession : injectez également des doublures pour les horloges et les ordonnanceurs.

Bonnes pratiques

Les tests efficaces de ViewModel :

  • Injectent toutes les dépendances au moyen de protocoles
  • Testent un seul comportement par méthode de test
  • Couvrent les chemins de réussite, d’état vide et d’erreur
  • Vérifient les sorties publiées que la vue lirait

Vérification rapide

Vérifiez vos connaissances sur les tests de ViewModel.

Récapitulatif

Vous avez appris à tester unitairement les ViewModels en isolation :

  • Injecter les dépendances derrière des protocoles
  • Utiliser des mocks pour contrôler les entrées et observer les appels
  • Couvrir les états de réussite, d’erreur et vide
  • Vérifier les sorties @Published et les transitions d’état

Les ViewModels testables sont le résultat de la séparation des responsabilités propre à MVVM.

Gratuit pour commencer

Apprends Swift avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
122
Leçons
409

Questions Fréquemment Posées

La leçon « Tester les modèles de vue » est-elle gratuite ?

Oui — le texte complet de « Tester les modèles de vue » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Tester les modèles de vue » ?

Testez unitairement la logique de présentation de manière isolée. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Tester les modèles de vue » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Le modèle MVVM
  2. Lier les modèles de vue aux vues
  3. Le modèle Coordinator
  4. Tester les modèles de vue
← Retour à Swift Academy