Test unitaire des formulaires Xamarin Afficher le modèle


Dans ce didacticiel, nous allons voir comment tester un modèle de vue dans une application Xamarin Forms.

Voir le modèle en bref

Le modèle de vue est la pièce maîtresse de la Model-View-ViewModel modèle. Lorsque vous n’utilisez pas MVVM, votre logique de présentation est dans la vue (code derrière), ce qui rend plus difficile à tester car la logique est couplée à des éléments d’interface utilisateur. D’un autre côté, lorsque vous utilisez MVVM, votre logique de présentation se déplace dans le modèle de vue, en découplant la logique de la vue, vous gagnez la possibilité de tester la logique sans être gêné par les éléments de l’interface utilisateur.

Commencer

Pour vous guider dans ce didacticiel, j’ai créé une application Xamarin Forms appelée WorkoutTube.

WorkoutTube permet aux utilisateurs de

  • Affichez une liste de vidéos d’entraînement sur Youtube.
  • Lancez l’application Youtube avec la vidéo sélectionnée, si l’application Youtube n’est pas installée, elle lancera la version du navigateur.

Le projet peut être téléchargé ici.

Aperçu du projet


Le projet est déjà implémenté, nous nous concentrerons uniquement sur les tests unitaires.

Afin d’exécuter le projet, éditez le fichier AppConfiguration.cs, sous le WorkoutTube projet, mettre à jour la propriété YoutubeApiKey avec la vôtre, vous pouvez demander la clé API Youtube ici.

Outils

Pour faciliter les tests, le projet de tests unitaires WorkoutTube.UnitTests utilise les packages suivants:

  • Autofac: Conteneur IoC.
  • AutoMock: permet de créer automatiquement de fausses dépendances
  • AutoFixture: bibliothèque pour .NET conçue pour minimiser la phase ‘Arrange’ de vos tests unitaires
  • FluentAssertions: API Fluent pour affirmer les résultats des tests unitaires

Rendre le modèle de vue testable

le HomePageViewModel détient des dépendances à d’autres services, au lieu de s’appuyer sur la mise en œuvre concrète de ces services, il s’appuie sur leurs abstractions.

La mise en œuvre concrète sera injectée à travers un conteneur Ioc.

Avoir la capacité d’injecter des dépendances est formidable car lors des tests, nous pouvons fournir des objets fictifs au lieu de vrais.

Injection de dépendance

Le projet WorkoutTube utilise AutoFac en tant que conteneur Ioc, les dépendances sont enregistrées dans App.xaml.cs.

Écriture des tests unitaires

Pour nos tests, le HomePageViewModel sera l’objet du test, nous nous concentrerons sur deux types de tests:

  • Etat: vérifier comment les valeurs des propriétés du modèle de vue sont affectées par certaines actions.
  • Les interactions: vérification de l’appel correct des méthodes du service de dépendances du modèle de vue.

États de test

le HomePageViewModel expose les propriétés et les commandes auxquelles la vue HomePage peut se lier à.


Écrivons un test qui vérifie que lorsque le HomePageViewModel est créé, la propriété Videos est vide.

Nous pouvons également écrire un test pour vérifier que lorsque HomePageViewModel est créée, la propriété SelectedVideo est nulle, ce qui signifie qu’aucune vidéo n’est encore sélectionnée.

Que diriez-vous de vérifier si l’OpenVideoCommand est correctement initialisé.

le HomePageViewModel a une méthode appelée Initialize, qui est appelée après la création du modèle de vue, dans cette méthode, le VideoService récupérer des vidéos de l’API Youtube.

Écrivons un test pour vérifier le scénario suivant: après une initialisation réussie, la propriété Videos doit être mise à jour avec les données récupérées du service.

Remarque: notez que nous configurons IVideoService en tant qu’objet simulé, de cette façon, nous ne communiquons pas avec l’API Youtube, les tests unitaires ne consistent pas à appeler une véritable API, c’est le travail des tests d’intégration.

Lors des tests, il est important de tester non seulement le chemin heureux mais aussi le chemin triste (lorsque les choses tournent mal). Dans HomePageViewModel, le code qui charge les vidéos est enroulé autour d’un bloc try / catch, lorsque nous interceptons une exception, nous affichons le message en utilisant IDialogService.

Écrivons un test pour le triste chemin.

Test des interactions

le HomePageViewModel expose une commande appelée OpenVideoCommand, une fois exécuté, il lance l’application Youtube via un service appelé YoutubeServiceLauncher.

Écrivons un test qui vérifie que la méthode OpenAsync de YoutubeServiceLauncher a été appelée.

 

On peut aussi passer le test du triste chemin.

Conclusion

Lorsque vous utilisez MVVM, il est important d’effectuer des tests unitaires de vos modèles de vue, les tests augmenteront la qualité globale de votre application.

J’espère que vous apprécierez ce tutoriel, le code source est disponible en téléchargement ici. Sentez-vous libre de l’utiliser.

Close Menu