unittest introduction – Tests Python

By | août 9, 2019

Expert Python

Le framework de test unittest est le framework de style xUnit de python.
C'est un module standard que vous avez déjà si vous avez la version 2.1 ou supérieure de Python.
Dans cet article, je couvrirai les bases de la création et de l'exécution d'un test simple en utilisant unittest.
Ensuite, je montrerai comment je l’utilise pour tester markdown.py.

Vue d'ensemble de unittest

Le module unittest s'appelait auparavant PyUnit, en raison de son héritage en tant que framework de style xUnit.
Il fonctionne de la même manière que les autres styles de xUnit, et si vous êtes familiarisé avec les tests unitaires dans d’autres langues, ce cadre (ou ses versions dérivées) peut être le plus confortable pour vous.

Le flux de travail standard est:
1. Vous définissez votre propre classe dérivée de unittest.TestCase.
2. Ensuite, remplissez-le avec les fonctions qui commencent par «test_».
3. Vous exécutez les tests en plaçant unittest.main () dans votre dossier, généralement en bas.

L'un des nombreux avantages de Unittest, que vous utiliserez lorsque vos tests deviendront plus volumineux que les exemples de jouets illustrés sur ce blog, est l'utilisation des fonctions 'setUp' et 'tearDown' pour que votre système soit prêt pour les tests. .

Comme dans l'introduction du doctest, je vais d'abord passer en revue un exemple simple, puis montrer comment j'utilise unittest pour tester markdown.py.

exemple unittest

En utilisant le même module inutile_math.py que j'ai écrit dans le
doctest intro, voici un exemple de test
code pour tester ma fonction "multiplier".

test_um_unittest.py:

Dans cet exemple, j’ai utilisé assertEqual (). Le cadre unittest a tout un tas de assertBlah () fonctions de style comme assertEqual (). Une fois que vous avez une référence raisonnable pour toutes les fonctions d’assertion marquées, le travail avec unnittest est assez puissant et facile.

Outre les tests que vous écrivez, vous pouvez réaliser la plupart de vos tâches avec les méthodes de test telles que setUp, tearDown, setUpClass, tearDownClass, etc.

Exécuter unittests

Au bas du fichier de test, nous avons ce code:

Cela nous permet d'exécuter tout le code de test simplement en exécutant le fichier.
L’exécuter avec aucune option est le plus concis, et exécuter avec un «-v» est plus détaillé, montrant quels tests
a couru.

Test de découverte

Disons que vous avez un tas de fichiers de test. Il serait ennuyeux de devoir exécuter chaque fichier de test séparément. C’est là que la découverte de test est utile.

Dans notre cas, tout mon code de test (un fichier pour le moment) est en ‘exemple_simple’.
Pour exécuter tous les unittests, utilisez python -m unittest découvrir simple_example, avec ou sans le «-v», comme ceci:

unittest exemple avec markdown.py

Maintenant, je vais lancer un peu plus mon projet markdown.py.
Cela va être assez simple, car les tests sont assez similaires aux versions doctest, juste formatés avec tous les éléments les plus légers, d’autant plus que je n’ai pas besoin d’utiliser des appareils startUp ou tearDown.

test_markdown_unittest.py:

Test de markdown.py

Et maintenant, nous pouvons voir que tout échoue (comme prévu).

Une chose intéressante à noter par rapport à doctest. Seuls les tests réels sont comptés.
J'ai 3 tests. Et unittest obtient ce droit.
Doctest répertorie 4 tests, l'un d'eux réussissant. Quel est le 4ème? C’est la déclaration d’importation.
Chaque déclaration est comptée dans doctest, donc les comptes sont un peu farfelus, si vous me demandez.
Les comptes sont beaucoup plus significatifs dans unittest.

Plus d'infos unittest

La page python.org sur unittest est une excellente source d’informations sur unittest.
Si vous avez un autre tutoriel ou référence préféré pour unittest, veuillez laisser un commentaire.

De plus, le code présenté ici est disponible sur github.com/varied Thoughts/markdown.py

Prochain

Maintenant que les bases du doctest et du unittest sont terminées, je vais me lancer dans une partie du plaisir en explorant nez, puis py.test.
Ensuite, avant d’aborder d’autres sujets amusants, je devrais probablement demander à mon script markdown.py de faire quelque chose.
Ce faisant, au moins un message sur mon utilisation des expressions régulières en python sera probablement publié.

Retour d'information

J'ai reçu des commentaires par courrier électronique et d'autres moyens.
Merci à tous ceux qui participent à cette discussion.

Si vous ne souhaitez pas laisser de commentaires sur un message, vous pouvez utiliser le formulaire de contact.
Si le formulaire de contact ne fonctionne pas pour vous, ou si vous n'aimez tout simplement pas les formulaires de contact, vous pouvez m'envoyer un email directement.

Le courrier électronique que j'ai configuré pour ce blog est
brian au test python DOT net (pas d'espaces, bien sûr)

J'ai une poignée d'idées pour les prochains articles de blog, je ne peux donc pas promettre de couvrir toutes les suggestions que les gens me font, mais je vais essayer de les intégrer, surtout si je peux apprendre quelque chose dans le processus.

Merci d'avoir lu. Rester en contact!