[PYTHON] J'ai essayé de résumer la méthode de mise en œuvre fréquemment utilisée de pytest-mock

J'ai vérifié comment utiliser pytest-mock, alors prenez note Il est difficile de vérifier les cas d'utilisation susceptibles d'être utilisés à l'avenir, je les ai donc résumés. C'est un article que j'ai écrit dans un jour après avoir vérifié pytest, donc je pense qu'il y a divers excès et lacunes, mais j'aimerais le mettre à jour chaque fois que je trouve un meilleur moyen.

À propos de pytest et pytest-mock

C'est l'une des bibliothèques utilisées lors de l'implémentation du code de test python. Veuillez consulter le site officiel pour plus de détails.

pytest https://docs.pytest.org/en/latest/index.html

pytest-mock https://pypi.org/project/pytest-mock/

Méthode utilisée pour l'explication

La méthode hoge suivante est la cible du test.

from mailer import Mailer

#exemples de messages
# ['1er texte', 'Deuxième texte']
def hoge(messages):
    try:
        #Envoyez autant de courriels que de messages
        for message in messages:
          has_error = Mailer.send(message)
          if has_error:
            #1 est renvoyé lorsqu'une erreur se produit
            return 1

        #Retourne 0 à la fin de la normale
        return 0
    except Exception as e:
        #Renvoie 2 lorsqu'une exception se produit
        return 2

La version utilisée au moment de la rédaction de cet article est la suivante.

Remplacez Mailer.send par une maquette

test_hoge.py


from hoge import hoge
from mailer import Mailer
from unittest.mock import call

def test_hoge(mocker):
    # Mailer.Remplacer envoyer par une simulation
    mailer_mock = mocker.patch.object(Mailer, 'send')

    messages = ['1er texte', 'Deuxième texte']

    #Mailer ci-dessus.Puisque envoyer est un simulacre, même si vous exécutez hoge, c'est un vrai Mailer.l'envoi ne sera pas exécuté
    assert hoge(messages) == 0

Je souhaite vérifier le nombre d'appels

test_hoge.py


from hoge import hoge
from mailer import Mailer
from unittest.mock import call

def test_hoge(mocker):
    # Mailer.Remplacer envoyer par une simulation
    mailer_mock = mocker.patch.object(Mailer, 'send')

    messages = ['1er texte', 'Deuxième texte']
    assert hoge(messages) == 0

    # Mailer.Vous pouvez voir que l'envoi est appelé deux fois
    assert mailer_mock.call_count == 2

Je veux vérifier qu'il n'est pas appelé

test_hoge.py


from hoge import hoge
from mailer import Mailer
from unittest.mock import call

def test_hoge(mocker):
    # Mailer.Remplacer envoyer par une simulation
    mailer_mock = mocker.patch.object(Mailer, 'send')

    #Puisque les messages sont vides, Mailer. empêcher l'envoi d'être appelé
    messages = []
    assert hoge(messages) == 0

    # Mailer.Vérifiez que l'envoi n'est pas appelé
    mailer_mock.assert_not_called()

Je veux vérifier les paramètres

test_hoge.py


from hoge import hoge
from mailer import Mailer
from unittest.mock import call

def test_hoge(mocker):
    # Mailer.Remplacer envoyer par une simulation
    mailer_mock = mocker.patch.object(Mailer, 'send')

    messages = ['1er texte', 'Deuxième texte']
    assert hoge(messages) == 0

    #La première fois'1er texte', La deuxième fois'Deuxième texte'Peut être vérifié qui est passé et appelé avec un paramètre
    mailer_mock.assert_has_calls([call('1er texte'), call('Deuxième texte')])

Je veux contrôler la valeur de retour

test_hoge.py


from hoge import hoge
from mailer import Mailer
from unittest.mock import call

def test_hoge(mocker):
    # side_Passer une liste de valeurs de retour sous forme de tableau à effet
    #Chaque fois qu'il est appelé, il sera retourné dans l'ordre depuis le début du tableau
    #Dans cet exemple, False est renvoyé la première fois et True la deuxième fois.
    mailer_mock = mocker.patch.object(Mailer, 'send', side_effect = [False, True])

    messages = ['1er texte', 'Deuxième texte']

    #Deuxième expéditeur.Comme send renvoie True, vous pouvez vérifier la valeur de retour 1.
    assert hoge(messages) == 1

Je veux soulever une exception

test_hoge.py


from hoge import hoge
from mailer import Mailer
from unittest.mock import call

def test_hoge(mocker):
    # side_Spécifiez une exception pour l'effet
    #Dans cet exemple, la première fois est False et la deuxième fois est une exception.
    mailer_mock = mocker.patch.object(Mailer, 'send', side_effect = [False, Exception('error')])

    messages = ['1er texte', 'Deuxième texte']

    #Deuxième expéditeur.Vous pouvez vérifier la valeur de retour 2 car send déclenche une exception
    assert hoge(messages) == 2

Recommended Posts

J'ai essayé de résumer la méthode de mise en œuvre fréquemment utilisée de pytest-mock
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé de résumer le code souvent utilisé dans Pandas
J'ai essayé de résumer les commandes souvent utilisées en entreprise
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
J'ai essayé de résumer la commande umask
J'ai essayé de résumer la modélisation graphique.
J'ai essayé de résumer les commandes utilisées par les ingénieurs débutants aujourd'hui
J'ai essayé de corriger la forme trapézoïdale de l'image
LeetCode j'ai essayé de résumer les plus simples
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
J'ai essayé de résumer la manière logique de penser l'orientation objet.
[Linux] J'ai essayé de vérifier la méthode de confirmation sécurisée du FQDN (CentOS7)
J'ai essayé de résumer les commandes Linux utilisées par les ingénieurs débutants aujourd'hui - Partie 1-
J'ai essayé de résumer comment utiliser matplotlib de python
J'ai essayé de résumer les paramètres des différentes bases de données de Django (MySQL, PostgreSQL)
J'ai essayé de résumer les opérations susceptibles d'être utilisées avec numpy-stl
J'ai essayé de visualiser les informations spacha de VTuber
J'ai essayé d'effacer la partie négative de Meros
J'ai essayé de résumer SparseMatrix
J'ai essayé de simuler la méthode de calcul de la moyenne des coûts en dollars
Je n'ai pas compris le redimensionnement de TensorFlow, alors je l'ai résumé visuellement.
J'ai essayé la méthode la plus simple de classification de documents multi-étiquettes
J'ai essayé de classer les voix des acteurs de la voix
[Python] J'ai essayé de résumer le tableau, la méthode de génération du dictionnaire, la méthode de boucle, la notation d'inclusion de liste
J'ai essayé de trouver l'entropie de l'image avec python
[Courses de chevaux] J'ai essayé de quantifier la force du cheval de course
[Première API COTOHA] J'ai essayé de résumer l'ancienne histoire
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
J'ai essayé de combattre le minimum local de la fonction Goldstein-Price
J'ai essayé de résumer comment utiliser à nouveau le référentiel EPEL
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
J'ai essayé d'utiliser la méthode Seaborn fréquemment utilisée avec le moins d'arguments possible [pour les débutants]
Je veux obtenir le nom de la fonction / méthode en cours d'exécution
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé de créer l'image de démarrage SD de LicheePi Nano
J'ai essayé d'agrandir la taille du volume logique avec LVM
J'ai utilisé la commande coupe du monde pour vérifier le résultat de la Coupe du monde.
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé de visualiser la condition commune des téléspectateurs de la chaîne VTuber
J'ai essayé de créer un linebot (implémentation)
J'ai essayé de résumer la gestion des exceptions Python
J'ai essayé le serveur asynchrone de Django 3.0
Entrée standard Python3 que j'ai essayé de résumer
J'ai essayé d'ajouter un post-incrément à l'implémentation CPython
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai essayé de toucher l'API COTOHA
J'ai essayé de résumer le contenu de chaque paquet enregistré par Python pip en une seule ligne
J'ai essayé de résumer les modules d'Ansible - l'édition Linux
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Implémentation ~
J'ai essayé de transformer l'image du visage en utilisant sparse_image_warp de TensorFlow Addons
[Python] J'ai essayé de résumer le type collectif (ensemble) d'une manière facile à comprendre.
J'ai essayé de résumer jusqu'à ce que je quitte la banque et devienne ingénieur