{{tag>dev python test unittest}}
====== Tests unitaires en python avec unittest ======
===== Généralités =====
**unittest** est un framework de test unitaires, c'est une implémentation Python des frameworks de type [[https://en.wikipedia.org/wiki/XUnit|xUnit]] inspirés de **SUnit**(Smalltalk's SUnit), conçu par Kent Beck in 1998 pour le langage orienté objet Smalltalk.
* Runner: Le programme en charge d'exécuter les tests créés via le framework et de présenter les résultats.
* Test fixture: Aménagement ou initialisation d'un environnement/contexte nécessaire à un ou plusieurs tests: création de répertoire, base de données temporaires, démarrage de processus serveur, etc.
* Test case (cas d'utilisation ou scénario de test): élément de base des tests. Il attend une réponse spécifique pour un ensemble particulier d'entrées. Le scénario considère un ensemble de conditions pour lesquelles on souhaite vérifier que le système réagit correctement.
* Test suite: collection de tests utilisée pour montrer qu'un programme réagit comme prévu dans l'ensemble des situation décrites par les tests.
===== Usage =====
* Les fichiers de tests sont des scripts Python dont le nom est préfixés par ''test_''
* On importe le module **unittest**
* Le script de test doit contenir une classe qui dérive de la classe ''unittest.TestCase''
* Les méthodes de tests contenues dans la classe doivent commencer par le mot clé ''test''. Cette convention permet au runner d'identifier les méthodes de test.
import unittest
On importe le module pour lequel on souhaite tester une fonction ou méthode:
from mon_module import fonction_a_tester as fonction_a_tester
On crée une classe de test elle doit impérativement hériter d'**unittest.TestCase**
===== Les méthodes assertX =====
Les méthodes usuelles:
^ assertEqual() | Vérifier que la valeur retournée est identique à celle attendue |
^ assertTrue() | La valeur retournée doit être Vrai |
^ assertFalse() | La valeur retournée doit être Faux |
^ assertRaises() | Vérifie la levée d'une exception spécifique |
===== Lancer les tests =====
Plusieurs façon de démarrer les tests:
# Retrouve tous les fichier test_* et les exécute
python -m unittest discover
# Exécuter un script de test en particulier
python -m unittest test_file.py
# Appeler directement le script, doit contenir l'appel
# de la méthode unittest.main() dans le script
python test_file.py
===== Exemples =====
===== Références =====
* http://sametmax.com/un-gros-guide-bien-gras-sur-les-tests-unitaires-en-python-partie-2/
* https://docs.python.org/fr/3/library/unittest.html
* https://www.youtube.com/watch?v=apgReCCAQr4