Comment tester le code Combine dans Swift
Tester notre code est une partie fondamentale du processus de développement.
Mais, si nous utilisons le framework Combine, cela pourrait ne pas être intuitif à première vue. Cela ne veut pas dire que cela ne peut pas être fait. Nous avons juste besoin d'approfondir certains concepts plus avancés que Swift nous fournit.
Voyons comment nous pouvons facilement inclure des tests unitaires dans notre code Combine.
Commençons par regarder le gestionnaire suivant qui simule la manipulation d'un feu de circulation.
D'après notre article initial sur Combine, nous savons qu'en ajoutant le wrapper @Published, nous obtenons un éditeur gratuit auquel nous pouvons accéder en utilisant le caractère $.
Essai
Avant de nous pencher sur la manière de tester réellement le code Combine, passons en revue certains concepts de base concernant les tests unitaires. Nous pouvons le résumer en trois étapes.
- Étape 1 : Définissez ce que vous voulez tester.
- Étape 2 : Exécutez l'opération que vous souhaitez tester avec la valeur que vous avez définie à l'étape 1.
- Étape 3 : Évaluez le résultat que vous avez obtenu à l'étape 2.
Ceci est un exemple très simple pour que vous puissiez comprendre le concept. Nous avons d'abord défini notre valeur attendue pour le test, un feu rouge. Ensuite, nous appelons une opération qui change la valeur actuelle de la lumière en rouge. Et enfin, nous nous assurons que la valeur de la lumière actuelle est la même que celle attendue.
C'est bien, mais que devons-nous faire si nous voulons tester simulateFlowla fonction ? Vous pouvez remarquer qu'à l'intérieur de cette fonction, nous modifions trois fois la propriété de la lumière. Ainsi, à la fin de l'exécution de la fonction, la valeur de la propriété doit passer du vert au jaune, du jaune au rouge et enfin du rouge au vert.
Comme vous pouvez l'imaginer, pour tester la fonction, nous devons nous assurer que la valeur de la propriété a la bonne valeur à la fin, mais surtout nous devons être sûrs que tous les changements de valeur (de l'un à l'autre) sont corrects .
Attentes
XCTestExpectations est un type d'objet qu'Apple nous fournit pour tester le code asynchrone. Fondamentalement, vous créez une attente au début de votre test et lorsque certaines conditions sont remplies, vous remplissez cette attente. L'exécution du test attendra que l'attente soit satisfaite ou qu'un délai d'attente ait expiré.
Ainsi, afin de tester notre fonction, nous devrons attendre de collecter toutes les valeurs attendues dont nous savons que currentLightla propriété doit changer. Ensuite, nous répondrons à l'attente si nous obtenons toutes les valeurs. Sinon, le test échouera en raison du délai d'attente.
Dans cet esprit, nous avons maintenant le bon outil pour créer un nouveau test pour notre simulateFlowfonction
Décomposons le code :
Étape 1
- Nous créons une nouvelle attente à utiliser dans notre test.
- Nous avons défini les valeurs attendues que nous savons que la propriété devrait changer à un moment donné.
- Nous avons également créé une nouvelle liste vide que nous allons utiliser pour stocker les valeurs que nous recevrons du Publisher.
- Nous commençons à écouter les valeurs de l'éditeur.
- Nous appelons la fonction pour commencer à recevoir les changements de valeur de la propriété.
- Nous attendons que l'attente soit remplie ou que le délai d'attente soit atteint.
- Nous évaluons si les valeurs reçues que nous avons obtenues sont correctes.
Tester le code Combine est assez facile une fois que vous avez compris le potentiel des attentes. Bien que nous ayons vu un exemple très court et simple, vous pouvez utiliser cette même technique pour tester des solutions plus complexes.
Par exemple, vous pouvez appliquer ces principes pour tester les états de votre ViewModel dans une architecture MVVM, ou pour tester des appels réseau factices.
Vous voudrez peut-être consulter mes articles précédents concernant Combine.
Introduction au framework Combine dans Swifthttps://blorenzop.medium.com/form-validation-with-combine-4988adcc3b0
Avez-vous des questions? N'hésitez pas à me laisser un message . Si vous aimez mon contenu, vous pouvez vous abonner à ma page Medium pour être averti directement dans votre boîte de réception chaque fois que je publie un nouvel article.
Si vous souhaitez me soutenir, vous pouvez me suivre sur GitHub ou Twitter .
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































