Tutoriel PyUnit : Python Cadre de tests unitaires (avec exemple)

โšก Rรฉsumรฉ intelligent

Python Les tests unitaires vรฉrifient de petites portions de code de maniรจre isolรฉe afin de dรฉtecter les bogues au plus tรดt. Vous dรฉcouvrirez ici les techniques de tests unitaires, le framework PyUnit (unittest), ses classes principales, la conception d'un cas de test et un exemple concret.

  • ๐Ÿงช Qu'est-ce que c'est: Les tests unitaires vรฉrifient de petites unitรฉs de code isolรฉes afin de dรฉtecter les bogues au plus tรดt.
  • (I.e. Techniques: Le TDD, les stubs et les mocks isolent le code afin que les tests unitaires soient effectuรฉs indรฉpendamment.
  • (I.e. UnitรฉPy : PythonLe module de test unitaire intรฉgrรฉ (PyUnit) est un portage de JUnit.
  • ๐Ÿงฑ Classes clรฉs : TestCase, TestSuite, TestLoader, TextTestRunner et TestResults.
  • ๐Ÿค– Aide de l'IA : Les outils d'IA comme Copilot gรฉnรจrent instantanรฉment des cas de test unitaires.

Python Tests unitaires

Qu'est-ce que le test unitaire?

Tests unitaires in Python est fait 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 code scriptรฉ conรงu dans Python pour vรฉrifier une petite ยซ unitรฉ ยป de fonctionnalitรฉ. Le test unitaire est un framework orientรฉ objet basรฉ sur des appareils de test.

Python Techniques de tests unitaires

Python Les tests unitaires 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 le 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 Python Testez unitairement et ensuite seulement vous continuez ร  รฉcrire le code qui implรฉmentera cette fonctionnalitรฉ.
  • Talons et simulations : Ce sont deux techniques principales qui simulent de fausses mรฉthodes testรฉes. UN Talon est utilisรฉ pour remplir certaines dรฉpendances requises pour que le test unitaire s'exรฉcute correctement. UN Moquer d'autre part c'est un faux objet qui exรฉcute les tests oรน l'on met de 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.

Python Cadre de tests unitaires

Pour faciliter le processus de tests unitaires et amรฉliorer la qualitรฉ de votre projet, il est recommandรฉ de Python Cadre de tests unitaires. Le cadre de tests unitaires comprend

Python Techniques de tests unitaires

  • UnitรฉPy : PyUnit prend en charge les appareils, les cas de test, les suites de tests et un programme d'exรฉcution 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
  • Nez: 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 obstacles ร  l'รฉcriture de tests. Il s'รฉtend Python unittest pour faciliter les tests.
  • Document : Le script de test Doctest est placรฉ 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 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 Python port de JUnit. Faisant partie de Pyunit, le module unittest contient cinq classes clรฉs.

Tests unitaires avec PyUnit

  • 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: Il 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, il propose une plate-forme standard pour exรฉcuter les tests
  • La classe TestResults: Il propose un conteneur standard pour les rรฉsultats des tests

Concevoir un cas de test pour Python Test avec 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 :

Concevoir un cas de test pour Python

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 courteDescription() renvoie le commentaire docstr au lancement de chaque routine de test.

Python Exemple de test unitaire

L'exemple ci-dessous teste une simple fonction add() avec le module unittest. Chaque mรฉthode prรฉfixรฉe par test_ s'exรฉcute automatiquement, et assertEqual vรฉrifie que le rรฉsultat correspond ร  la valeur attendue.

import unittest

def add(a, b):
    return a + b

class TestAdd(unittest.TestCase):
    def test_add_positive(self):
        self.assertEqual(add(2, 3), 5)

    def test_add_negative(self):
        self.assertEqual(add(-1, -1), -2)

if __name__ == "__main__":
    unittest.main()

Enregistrez le code et exรฉcutez-le avec la commande `python filename.py`. L'outil d'exรฉcution des tests unitaires indiquera le nombre de tests rรฉussis ou รฉchouรฉs.

Avantages de l'utilisation Python Tests unitaires

  • 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

FAQ

Les tests unitaires vรฉrifient de maniรจre isolรฉe une petite unitรฉ de code, comme une fonction. Ils permettent de dรฉtecter les bogues dรจs les premiรจres รฉtapes du dรฉveloppement, lorsqu'ils sont moins coรปteux et plus faciles ร  corriger.

PyUnit est PythonLe framework de tests unitaires intรฉgrรฉ de , disponible sous le nom de module unittest. Il s'agit d'un portage de JUnit et prend en charge les fixtures, les cas de test, les suites de tests et un exรฉcuteur de tests.

Crรฉez une sous-classe de `unittest.TestCase`, รฉcrivez des mรฉthodes commenรงant par `test_` et utilisez des assertions comme `assertEqual` ร  l'intรฉrieur. Exรฉcutez le fichier avec `unittest.main()` pour lancer tous les tests.

La fonction `setUp()` s'exรฉcute avant chaque mรฉthode de test pour prรฉparer les fixtures, tandis que `tearDown()` s'exรฉcute aprรจs chaque test pour nettoyer les donnรฉes. Ensemble, elles garantissent l'indรฉpendance et la reproductibilitรฉ des tests.

Les stubs fournissent des donnรฉes fixes dont un test dรฉpend, tandis que les mocks sont des objets factices sur lesquels on effectue des assertions. Les deux remplacent les dรฉpendances rรฉelles afin qu'une unitรฉ soit testรฉe de maniรจre isolรฉe.

Les assistants IA comme GitHub Copilot gรฉnรจrent des cas de test unitaires ร  partir d'une fonction, suggรจrent des cas limites et des assertions, et crรฉent des simulations pour les dรฉpendances pendant que vous รฉcrivez du code.

Oui. Les outils basรฉs sur l'IA peuvent automatiser la gรฉnรฉration de suites de tests, produire des assertions pour les rรฉsultats attendus et augmenter la couverture du code en suggรฉrant des tests pour les branches non testรฉes.

unittest est PythonLe framework intรฉgrรฉ de `s` utilise des classes et des mรฉthodes d'assertion, tandis que pytest est une bibliothรจque tierce offrant des instructions d'assertion plus simples et des fixtures puissantes. Les deux exรฉcutent des tests unitaires.

Rรฉsumez cet article avec :