Qu'est-ce que le test unitaire?
Les tests unitaires en Python sont effectués pour identifier les bogues au 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 montages de test.
Techniques de test unitaire Python
Les tests unitaires Python consistent principalement à tester un module particulier sans accéder à un code dépendant. Les développeurs peuvent utiliser des techniques comme les stubs et les simulacres pour séparer le code en «unités» et exécuter des tests au niveau unitaire sur les pièces individuelles.
- TDD de développement piloté par les tests: 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: Ce sont deux techniques principales qui simulent de fausses méthodes qui sont 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 assert.
Les intentions des deux méthodes sont les mêmes pour éliminer le test de toutes les dépendances d'une classe ou d'une fonction.
Framework de test unitaire Python
Pour faciliter le processus de test unitaire et améliorer la qualité de votre projet, il est recommandé d'utiliser Python Unit Testing Framework. Le cadre de test unitaire comprend
- PyUnit: PyUnit prend en charge les fixtures, les cas de test, les suites de tests et un testeur pour le test automatisé du code. Dans PyUnit, vous pouvez organiser les cas de test en suites avec les mêmes appareils
- Nose: Les plug-ins intégrés de Nose vous aident avec la capture de sortie, la couverture de code, les doctests, etc. La syntaxe de Nose est assez simple et réduit les barrières à l'écriture des tests. Il étend Python unittest pour faciliter les tests.
- Doctest: Le script de test Doctest va dans docstring avec une petite fonction au 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 n'attrape pas les cas particuliers. Ils sont utiles comme documentation expressive du cas d'utilisation principal d'un module et de ses composants.
Test unitaire avec PyUnit
Pyunit est un port Python de JUnit. Dans le cadre de Pyunit, dans le module unittest, il existe cinq classes clés.
- Classe TestCase : la classe TestCase supporte les routines de test et fournit des crochets pour effectuer chaque routine et nettoyer par la suite
- Classe TestSuite : il sert de conteneur de collection et peut posséder plusieurs objets de testcase et plusieurs objets de testsuites
- 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 d'objets qui possède ces suites et ces cas
- Classe TextTestRunner : pour exécuter les tests, il s'adresse à une plate-forme standard pour exécuter les tests
- La classe TestResults : elle offre 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 cas de test, qui peut être utilisé pour créer de nouveaux cas de test. Pour concevoir le cas de test, trois ensembles de méthodes sont utilisés:
unittest.TestCase
setUp()teardown()skipTest(aMesg:string)fail(aMesg:string)id():stringshortDescription():string
Dans le premier ensemble se trouvent les crochets de pré et post-test. La méthode setup () commence avant chaque routine de test, le teardown () après la routine.
Le deuxième ensemble de méthodes contrôle l'exécution du test. Les deux méthodes prennent une chaîne de message en entrée et toutes deux annulent un test en cours. Mais la méthode skiptest () abandonne le test en cours tandis que la méthode fail () é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 bogues au 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 aura beaucoup moins de bugs
- Il est plus facile de modifier à l'avenir avec très moins de conséquences