Pour les tests unitaires,Notre principe général est:
Les tests unitaires doivent être écrits,Parce que c'est ainsi que la qualité du programme est garantie et que les bonnes habitudes sont développées,Mais ne complique pas trop les tests unitaires,Consacrer trop d'énergie à ça,Alors c'est l'inverse.
pytestUtilisation simple de
Sélection de l'outil d'essai de l'unit épytest(Cet outil etgo testUn peu comme),Utilisation simple:
# Documentation: example.py def func(i: int) -> int: return i * 2 # Documentation: example_test.py from .example import func def test_func(): assert func(10) == 20 assert func(20) == 30
Exécuter la commande dans le même répertoirepytest,Cette commande trouve automatiquement*_test.pyDocuments(Attention!:Le répertoire actuel nécessite des fichiers__init__.py)Exécuter le cas d'essai.Apparemment, ce test d'Unit é a échoué,Les informations d'erreur sont les suivantes::
def test_func(): assert func(10) == 20 > assert func(20) == 30 E assert 40 == 30 E + where 40 = func(20) doctest_example_test.py:7: AssertionError
pytest Les fichiers de test peuvent être trouvés automatiquement Récursivement ,Pendant l'utilisation, L'exécution des cas d'utilisation spécifiés est également prise en charge :
Plusieurs spécifications relatives aux essais unitaires
À propos des tests unitaires , Nous définissons plusieurs spécifications d'utilisation :
Utiliser des tests paramétriques pour optimiser les cas d'essai
Dans la pratique, Nous devrions donner la priorité à l'utilisation de tests paramétriques : # Le cas d'essai précédent aurait dû être optimisé pour : import pytest # La partie des données ici peut être définie comme une variable # De cette façon, il n'est pas nécessaire d'écrire plusieurs fois assertLa déclaration est @pytest.mark.parametrize("params, expected", [([10], 20), ([20], 30)]) def test_func2(params, expected): assert func(*params) == expected Encore une fois,Après exécution, Le test a aussi échoué :
@pytest.mark.parametrize("params, expected", [([10], 20), ([20], 30)]) def test_func2(params, expected): > assert func(*params) == expected E assert 40 == 30 E + where 40 = func(*[20]) doctest_example_test.py:18: AssertionError
Si vous prenez çaparametrize Si la fonction est encapsulée , Ça devrait être plus facile , Par exemple, un test à l'unit é décrit simplement l'entrée et la sortie :
# Il suffit de se concentrer sur l'écriture des cas d'essai test_data = [ (func, [10], {}, 20), (func, [20], {}, 30) ] @pytest.mark.parametrize("action, args, kwargs, expected", test_data) def test_all_func(action, args, kwargs, expected): assert action(*args, **kwargs) == expected Voilà., Il suffit de se concentrer sur l'écriture des cas d'essai .
20210626
Cet article est partagé par Wechat public Number - SauvageAIArchitecte(Moon-CV) ,Auteur:La luneAI
La source originale et les informations reproduites sont détaillées dans le texte,En cas d'infraction,Veuillez contacter: [email protected] Supprimer.
Date de publication originale: 2021-06-26
Participation à cet articleTencent Cloud Self - media Sharing Plan,Bienvenue à la lecture,Partager ensemble.