Tutoriel PyUnit : Framework de tests unitaires Python (avec exemple)
Qu’est-ce que les tests unitaires ?
Les tests unitaires en Python sont effectués pour identifier les bogues dès le début de la phase de développement de l'application, lorsque les bogues sont moins récurrents et moins coûteux à corriger.
Un test unitaire est un test de niveau de code scripté conçu en Python pour vérifier une petite « unité » de fonctionnalité. Le test unitaire est un framework orienté objet basé sur des appareils de test.
Techniques de tests unitaires Python
Les tests unitaires Python consistent principalement à tester un module particulier sans accéder à aucun code dépendant. Les développeurs peuvent utiliser des techniques telles que des stubs et des simulations pour séparer le code en « unités » et exécuter des tests au niveau unitaire sur les éléments individuels.
- Développement piloté par les tests TDD : Les tests unitaires doivent être effectués avec Python, et pour cela, les développeurs utilisent la méthode de développement piloté par les tests. Dans la méthode TDD, vous concevez d'abord des tests unitaires Python et ensuite seulement vous continuez à écrire le code qui implémentera cette fonctionnalité.
Stubs et Mocks : il s'agit de deux techniques principales qui simulent de fausses méthodes testées. Un Stub est utilisé pour remplir certaines dépendances requises pour que le test unitaire s'exécute correctement. Un Mock, en revanche, est un faux objet qui exécute les tests où nous mettons l'assertion.
Les intentions des deux méthodes sont les mêmes : éliminer le test de toutes les dépendances d’une classe ou d’une fonction.
Cadre de tests unitaires Python
Pour faciliter le processus de tests unitaires et améliorer la qualité de votre projet, il est recommandé d'utiliser le Python Unit Testing Framework. Le cadre de tests unitaires comprend
- PyUnit : PyUnit prend en charge les appareils, les cas de test, les suites de tests et un lanceur de tests pour les tests automatisés du code. Dans PyUnit, vous pouvez organiser les cas de test en suites avec les mêmes accessoires
- Nose : Les plug-ins intégrés de Nose vous aident à capturer les résultats, à couvrir le code, aux doctests, etc. La syntaxe de Nose est assez simple et réduit les obstacles à l'écriture de tests. Il étend Python unittest pour faciliter les tests.
- Doctest : Le script de test Doctest va dans la docstring avec une petite fonction en bas du fichier. Doctest vous permet de tester votre code en exécutant des exemples inclus dans la documentation et en vérifiant qu'ils ont renvoyé les résultats attendus. Le cas d'utilisation de doctest est moins détaillé et ne prend pas en compte les cas particuliers. Ils sont utiles en tant que documentation expressive du cas d'utilisation principal d'un module et de ses composants.
Tests unitaires avec PyUnit
Pyunit est un port Python de JUnit. Faisant partie de Pyunit, le module unittest contient cinq classes clés.
- Classe TestCase : la classe TestCase supporte les routines de test et fournit des hooks pour créer chaque routine et nettoyer par la suite.
- Classe TestSuite : elle sert de conteneur de collection et peut posséder plusieurs objets de cas de test et plusieurs objets de suites de tests.
- Classe TestLoader : cette classe charge les cas de test et les suites définis localement ou à partir d'un fichier externe. Il émet une suite de tests qui possède ces suites et cas
- Classe TextTestRunner : pour exécuter les tests, elle s'adresse à une plate-forme standard pour exécuter les tests
- La classe TestResults : elle propose un conteneur standard pour les résultats des tests
Conception d'un scénario de test pour les tests Python à l'aide de PyUnit
Un test unitaire fournit une classe de base, un scénario de test, qui peut être utilisé pour créer de nouveaux scénarios de test. Pour concevoir le scénario de test, trois ensembles de méthodes sont utilisées :
unittest.TestCase
setUp()
teardown()
skipTest(aMesg:string)
fail(aMesg:string)
id():string
shortDescription():string
Dans le premier ensemble se trouvent les crochets pré et post-test. La méthode setup() commence avant chaque routine de test, la méthode teardown() après la routine.
Le deuxième ensemble de méthodes contrôle l’exécution des tests. Les deux méthodes prennent une chaîne de message en entrée et annulent toutes deux un test en cours. Mais la méthode skiptest() abandonne le test en cours tandis que la méthode fail() l'échoue complètement.
La dernière ou la troisième méthode aide à déterminer le test. La méthode id() renvoie une chaîne composée du nom de l'objet testcase et de la routine de test. Et la méthode shortDescription() renvoie le commentaire docstr au lancement de chaque routine de test.
Avantages de l'utilisation des tests unitaires Python
- Il vous aide à détecter les bugs dès le début du cycle de développement
- Cela vous aide à écrire de meilleurs programmes
- Il se synchronise facilement avec d'autres méthodes et outils de test
- Il y aura beaucoup moins de bugs
- Il est plus facile de modifier à l'avenir avec très peu de conséquences