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.
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/
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.
Mailer.send
par une maquettetest_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
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
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()
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')])
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
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