Fermer

septembre 3, 2024

Le nouveau cadre de test de Swift | AU NOUVEAU BLOG

Le nouveau cadre de test de Swift | AU NOUVEAU BLOG


Tests rapides

Tests rapides

La WWDC 2024 a dévoilé une amélioration majeure de XCTest, qui est Le cadre de test de Swift. J’ai trouvé cela vraiment bénéfique en travaillant là-dessus. J’ai donc décidé de le partager avec vous tous. Commençons.

Introduction

Swift Testing vous permet d’utiliser les capacités puissantes et expressives du langage de programmation Swift pour écrire des tests avec plus de confiance et moins de code. La bibliothèque fonctionne parfaitement avec Swift Package Manager et le workflow de test de Xcode, permettant une organisation de test flexible, des métadonnées personnalisables et une exécution de test évolutive.

Tests XCTest et Swift

Il est maintenant temps de comprendre pourquoi nous avons besoin du Swift Testing Framework alors que nous disposons déjà du XCTest Framework. En quoi diffère-t-il de XCTest et quels sont les avantages de son utilisation par rapport à XCTest ?

Cadre XCTest

XCTest est le framework de test par défaut d’Apple pour Swift et Objective-C. Il est intégré à Xcode et offre une prise en charge complète des tests unitaires, de performances et d’interface utilisateur. XCTest est largement utilisé en raison de son interaction fluide avec Xcode, ce qui en fait le choix préféré de nombreux développeurs Swift.

Principales fonctionnalités

  1. Intégration avec Xcode : XCTest est fortement lié à Xcode, permettant la création simple de tests, l’exécution et le débogage.
  2. Bibliothèque d’assertions : XCTest fournit une variété d’assertions pour valider les scénarios de test. Ce qui le rend simple à utiliser.
  3. Couverture des codes : Prend en charge l’analyse de la couverture du code pour découvrir le code non testé.

Exemple:

Exemple de test XCT

Exemple de test XCT

Cadre de test Swift

Swift Testing Framework, également connu sous le nom de Swift Test, est un framework moderne créé exclusivement pour l’écriture de tests dans Swift. Il cherche à fournir une méthode d’écriture de tests plus rapide, plus expressive et plus puissante que le framework XCTest existant.

Principales fonctionnalités

  1. DSL pour les tests : Les frameworks de tests Swift utilisent fréquemment un langage spécifique au domaine (DSL) pour rendre la création de tests plus intuitive et plus lisible. Cela peut donner lieu à des tests qui ressemblent davantage à un langage normal qu’à du code.
  2. Assistance Swift de première classe : Ces frameworks, spécialement créés pour Swift, tirent parti des caractéristiques du langage telles que les options facultatives, les génériques et l’inférence de type pour offrir une expérience de test plus fluide.
  3. Moquerie et stubbing : De nombreux frameworks de test Swift modernes prennent en charge la simulation et le stubbing, ce qui facilite la séparation du code testé.
  4. Tests asynchrones : Prise en charge améliorée du test du code asynchrone, qui est de plus en plus crucial dans les applications Swift modernes.

Avantages des tests Swift

  1. Détection précoce des bugs : L’écriture de tests permet de détecter les bogues et les obstacles dès le début du processus de développement, minimisant ainsi le coût et le travail requis pour les réparer ultérieurement.
  2. Refactoriser la confiance : Les tests servent de filet de sécurité lors de la réécriture du code, garantissant que les modifications n’introduisent pas de nouveaux bugs.
  3. Documentation: Les tests servent de documentation, démontrant comment le code doit réagir dans différents contextes.
  4. Intégration continue : Des tests automatisés peuvent être ajoutés aux pipelines d’intégration continue (CI), garantissant que les modifications de code sont testées automatiquement.

Ajouter des tests Swift

Voyons comment ajouter Swift Testing à un projet existant ou à un nouveau.

1. Ajout d’un projet existant : – Pour ajouter une nouvelle cible, suivez les étapes.
Cliquez sur Fichier -> Nouveau -> Cible

Ajout d'une cible

Ajout d’une cible

2. Choisissez la cible : – Dans la fenêtre contextuelle cible, recherchez les tests unitaires et sélectionnez-les comme indiqué dans l’image.

Cible des tests unitaires

Cible des tests unitaires

3. Nom de la cible : – Donnez maintenant le nom à la cible et sous le système de test, sélectionnez Swift Testing et cliquez sur Terminer.

Donnez un nom et sélectionnez Swift Testing

Donnez un nom et sélectionnez Swift Testing

Nous avons maintenant importé Test Target ici et il est temps d’écrire notre premier cas de test rapide.

Élément constitutif des tests Swift

1. Ajouter un scénario de test :

Premier exemple Swift

Premier exemple Swift

Selon l’exemple ci-dessus, il nous suffit de importer les tests cadre avec lequel commencer à travailler Tests rapides. Pour rendre n’importe quelle fonction testable, il suffit d’ajouter le @Test attribut. Après avoir ajouté cet attribut, une boîte en forme de diamant a été ajoutée devant pour tester la fonction.

2. Ajouter une attente

Après avoir ajouté le cas de test, nous devons définir nos attentes en utilisant les macros fournies par le framework.

je. #attendre:- En utilisant cette macro, nous pouvons définir nos attentes. Il est validé si la condition donnée est vraie ou fausse. Nous n’avons pas besoin d’ajouter plusieurs assertions pour valider les conditions Bool telles que XCAssertEqual, XCTAssertNotEqual, XCTAssertTrue, etc. Comprenons-le par exemple.

#attendez-vous à des utilisations de macros

#attendez-vous à des utilisations de macros

Comme on peut le voir un succès attente et un échec attente. Ici, nous testons deux cas, l’un est égal à et l’autre est supérieur à et les deux peuvent être exécutés en utilisant #attendre macro. Tandis que dans XCTest nous avons deux assertions dans ce cas.

ii : #expect(.throws : (toute erreur) .self : – Cette macro est utilisée pour s’attendre à ce qu’une erreur soit générée. Vous spécifiez le type d’erreur ou l’erreur réelle que vous prévoyez d’être générée. Le test échouera si le code de la macro ne génère pas d’erreur ou si l’erreur n’est pas celle souhaitée. En utilisant (toute erreur).selfvous indiquez que le code doit générer toute erreur confirmant le protocole Error.

Exemple de #expect(.throws : (toute erreur).self)

Exemple de #expect (.throws : (toute erreur).self).

iii. #nécessite une macro : – Cette macro est utilisée, comme son nom l’indique, lorsqu’une méthode doit exécuter certains prérequis avant de poursuivre le scénario de test. Si les circonstances nécessaires ne sont pas réunies, le test échoue. Examinons un exemple.

Exemple de macro #require

Exemple de macro #require

Dans l’exemple ci-dessus, on peut voir que si un nom est nul #exiger les macros échouent et arrêtent l’exécution de #attendre macro.

Les nouveaux tests de Swift Framework a ajouté un certain nombre de nouvelles macros. Dans les prochains articles, nous en parlerons davantage. Passons maintenant à un autre ensemble d’éléments de base.

3. Caractéristiques

Les traits sont essentiellement utilisés pour définir les caractéristiques, les attributs ou les comportements d’un bloc de code ou d’une fonction. Il est également utilisé pour définir les informations descriptives des cas de test. Voyons comment définir un trait.

Exemple de traits

Exemple de traits

Comme nous pouvons le voir dans l’exemple ci-dessus, lorsque nous définissons les traits d’une méthode de cas de test, il remplace le nom de la fonction par les traits donnés dans le volet de navigation de gauche. Il est utile de définir les cas et facile de découvrir et de déboguer en cas d’échec.

Il y a tellement de traits introduits avec Les nouveaux tests de Swift Cadre. Vous pouvez vérifier ceci Lien.

4. Suites de tests

Les suites sont essentiellement utilisées pour combiner les Fonction de test et Suites. Il peut être annoté en utilisant @suite. N’importe lequel Fonction de test est implicitement considéré comme une suite. Les suites peuvent avoir des propriétés stockées. Cela peut avoir initialisation et désInit méthodes pour installation et démolir logique respectivement. Chaque fois que nous créons un objet d’une suite, il appelle automatiquement initialisation() et une fois les cas de test exécutés avec succès, il doit être désinitialisé comme si nous travaillions sur la classe et les structures. Jetons un coup d’œil à un exemple.

Exemple de suite

Exemple de suite

Comme nous pouvons le voir dans l’exemple ci-dessus, tous les cas de test concernant Name sont combinés dans une seule suite et nous avons donné des informations descriptives sur la suite qui s’afficheront dans le volet de navigation de gauche comme dans l’image.

Le framework Swift Testing nous permet de transmettre des paramètres dans une fonction qui les rend testables avec plusieurs valeurs différentes. Cela rend les tests plus efficaces et plus faciles à gérer. Regardons un exemple.

Exemple de cas de test paramétré

Exemple de cas de test paramétré

Nous avons créé un scénario de test qui s’attend à ce que l’identifiant de messagerie donné ne soit pas nul. Mais en même temps, nous avons eu une erreur de compilation qui indique que nous devons transmettre la valeur de l’argument dans le @Test Attributs. Corrigeons-le et voyons comment cela fonctionne.

Exemple de cas de test avec paramètre

Exemple de cas de test avec un paramètre

Comme nous pouvons le voir dans l’exemple donné, nous passons un tableau de chaînes et le Fonction de test itère chacun d’eux et les valide. Il affichera le résultat de chaque paramètre, que ce soit Laissez-passer ou Échouer et en cas d’échec, quelle en sera la raison ? Nous pouvons également vérifier le résultat dans le Panoramique de navigation gauche. Nous pouvons réexécuter uniquement l’argument ayant échoué.

Tests conditionnels

Pendant que nous travaillons sur un gros projet comportant plusieurs cas de test et étant en mode maintenance, nous avons pour tâche de modifier le comportement existant de l’application. Dans ce cas, les chances sont très élevées que cela ait un impact sur le scénario de test. Nous pouvons donc être amenés à désactiver certains cas de test ou à ne les exécuter que dans certaines conditions. Ici Cadres de tests Swift pour nous aider à le faire avec un minimum de changements en utilisant .activer ou .désactiver attributs avec @Test.

Exemple d'attribut .enable

Exemple d’attribut .enable

Exemple d'attribut .disable

Exemple d’attribut .disable

Dans l’exemple donné, nous avons utilisé les attributs .enable et .disable. Pour utiliser l’attribut .enable, nous devons passer une condition spécifique. Si la condition est vraie, il s’exécutera, sinon il ignorera le test. Idem avec l’attribut Disable. Si nous ajoutons cet attribut, le scénario de test sera ignoré et affichera la description.

Conclusion

Les comportements de test peuvent être déclarés avec moins de code grâce à l’API expressive de Swift Testing avec des macros. Les expressions et opérateurs Swift sont utilisés par l’API #expect pour valider les expressions fournies. De plus, Swift Testing facilite les tests parallèles, ce qui augmente la productivité générale et l’efficacité des tests.

VOUS TROUVEZ CELA UTILE ? PARTAGEZ-LE






Source link