Python Autospec moqueur

Python Autospec moqueur
«Lors du développement de tests, les moqueurs ainsi que les simulations sont incroyablement utiles car ils permettent de séparer la référence faite de ses dépendances, ce qui entraîne moins de tests fragiles. En incluant des simulations dans les tests unitaires, nous pouvons être certains que les échecs seront causés par une modification de la façon dont l'objectif du test est mis en œuvre. Cependant, la configuration des simulations peut entraîner des tests qui passent lorsqu'ils ont besoin d'échouer. Dans cet article, nous utiliserons quelques exemples pour illustrer le fonctionnement de la moquerie autospace dans Python."

Exemple 01

Commençons par la première illustration. La calculatrice.Le module PY comprend les lignes de code suivantes. Dans la première ligne, nous avons défini l'ajout de la fonction et multiplié pour la calculatrice de classe. Deux nombres sont multipliés ensemble en utilisant la deuxième fonction nommée «Multiply»; De même, la première fonction est utilisée pour obtenir la somme des deux nombres. Les deux fonctions ne renvoient que l'ajout et certains des nombres fournis; Ils n'impriment aucune sortie.

Nous avons construit deux fonctions de module en dehors de la classe dans laquelle les objets de classe du type de calculatrice sont créés, et les méthodes d'addition et de multiplication de la classe de calculatrice sont appelées. Vérifiez le code dans l'image apposée.

La somme et les fonctions de multiplication de la calculatrice.Le module PY sera utilisé dans le module simple que nous construisons, calculateur de test.py. Le code est incroyablement simple; Nous n'importons que les méthodes de multiplication et de somme à partir du module de calculatrice. Après cela, nous avons exécuté la fonction de somme et fourni les 2 et 5 comme paramètres.

Semblable à la façon dont nous avons appelé la fonction de multiplication, nous avons passé les paramètres 5 et 3 dans cette fonction de module. À l'aide de l'instruction PRINT, nous affichons la sortie que ces fonctions renvoient. Vérifiez le code dans l'image apposée.

Exécutez le test_calculator.module py à ce stade pour voir les résultats. Bien que vous puissiez utiliser n'importe quel autre outil, nous écrivons et exécutons le code à l'aide de l'outil Spyder 3. La sortie dans la borne de l'outil Spyder est visible, comme vous pouvez le voir. Utilisation de la calculatrice.Classe PY, la sortie de multiplication de la fonction est de 15, et sa sortie de somme est 7, ce qui est le résultat prévu.

Exemple 02

Maintenant, nous allons à un test pour la somme et la multiplication, mais supposons que nous devons se moquer de l'ajout et de multiplier les fonctions. Les moqueurs et les simulations sont très utiles lorsque nous écrivons des tests pour nos modules car ils nous permettent d'isoler les cibles de test de leurs dépendances qui provoquent des tests moins fragiles. Si nous utilisons des simulations dans nos tests unitaires, tous les tests qui échouent le feront en raison d'une modification apportée à la mise en œuvre de la cible.

Cependant, nous pouvons construire la maquette d'une manière qui pourrait empêcher les tests d'échouer quand ils devraient! Mettons à niveau notre test_calculator.module py pour y ajouter du code de maquette. L'instantané de code est illustré ci-dessous:

Lorsqu'il est exécuté, ce test facile est réussi. La spécification consiste à construire un objet simulé avec la même API / structure que l'objet moqué, qui échouera s'il est utilisé d'une manière qui s'écarte de la spécification. La fonction create_autospecc dans le module Mock est la première des deux méthodes pour accomplir ce. Construisons un objet simulé en utilisant la spécification de la fonction donnée. Vérifiez le code dans l'image apposée.

En utilisant un autre objet comme spécification, un objet simulé est créé à l'aide de la fonction Create Autospec. La signature de toutes les fonctions appelées sur la simulation est vérifiée en premier. Ceci est avantageux car la fonction simulée s'appuie désormais sur l'implémentation réelle, et nous rencontrerons un problème si la version change et que la calculatrice ne respecte pas les signatures des personnes à charge.

Lorsque nous exécutons le morceau de code ci-dessus pour le test unitaire, nous ne trouvons aucune erreur pendant l'exécution. Cela signifie que nous avons réussi le test. Nous avons maintenant mis à jour le code et ajouté quelques lignes. Nous avons passé la fonction de multiplication à la fonction create_autospace et avons sauvé la sortie de la multiplication. Vérifiez le code dans l'image apposée.

Lorsque nous appelons la fonction pour multiplier avec un seul paramètre et exécuter le code alors, il soulève une erreur sur l'écran de sortie comme indiqué ci-dessous:

Si nous ne transmettons aucun paramètre à cette fonction, il demande à l'utilisateur de saisir les valeurs num1 et num2. Vérifiez le code dans l'image apposée.

Voici la capture d'écran de l'exécution du code:

Lorsque nous passons les deux arguments NUM1 et NUM2, le test ci-dessus est exécuté avec succès; Les modifications des codes peuvent être vues dans l'écran ci-dessous:

Comme nous l'avons discuté précédemment, Create_Autospec est une méthode pour ce faire, mais une autre consiste à définir AutoSpec = TRUE lors de l'utilisation du décorateur de patch pour simuler un objet. Nous reviendrons au module Test_calculator et mettrons à jour le code comme indiqué ci-dessous la capture d'écran. Les deux premières lignes ont déjà été utilisées dans plusieurs cas. Le nom de la fonction du module et la valeur vraie pour l'AUTSpec ont été transmises au @Mock.Méthode de chemin dans la troisième ligne de code.

Dans la droite ci-dessous, nous avons défini une fonction appelée test_multiply où nous avons passé la variable d'objet simulé; Plus tard, nous devons utiliser la même variable pour appeler la fonction multiplier. Il y a une ligne dans ce code qui contient une erreur qui est le 6e ligne parce que nous devons utiliser la fonction de maquette pour fonctionner au lieu d'utiliser directement la fonction de multiplication. Vérifiez le code dans l'image apposée.

Voici le code mis à jour. Lorsque nous exécutons ce test unitaire, nous ne recevons aucune erreur, ce qui signifie que ce test est passé. Vérifiez le code dans l'image apposée.

Conclusion

Il s'agit de l'utilisation de Python Autospec se moquant dans certains de nos exemples Python exécutés dans l'outil Spyder 3 Python. Tous les exemples utilisés dans cet article sont faciles à faire et à apprendre. Alors, essayez de ne manquer personne pour mieux comprendre.