Configuration des tests unitaires pour le code PythonSetting up unit testing for Python code

Les tests unitaires sont des éléments de code qui permettent de tester d’autres unités de code dans une application, généralement des fonctions isolées, des classes, etc.Unit tests are pieces of code that test other code units in an application, typically isolated functions, classes, and so on. Quand une application réussit tous ses tests unitaires, vous avez au moins la garantie que ses fonctionnalités secondaires sont correctes.When an application passes all its unit tests, you can at least trust that its low-level functionality is correct.

Python utilise largement les tests unitaires pour valider des scénarios lors de la conception d’un programme.Python uses unit tests extensively to validate scenarios while designing a program. La prise en charge de Python dans Visual Studio inclut la découverte, l’exécution et le débogage de tests unitaires dans le cadre de votre processus de développement, sans qu’il soit nécessaire d’exécuter les tests séparément.Python support in Visual Studio includes discovering, executing, and debugging unit tests within the context of your development process, without needing to run tests separately.

Cet article fournit une brève description des fonctionnalités de tests unitaires contenues dans Visual Studio avec Python.This article provides a brief outline of unit testing capabilities in Visual Studio with Python. Pour plus d’informations sur les tests unitaires en général, consultez la page Tests unitaires sur votre code.For more on unit testing in general, see Unit test your code.

Icône représentant une caméra pour les vidéosmovie camera icon for video Regardez une vidéo (Microsoft Virtual Academy) sur le test unitaire dans Python (2 min31s).Watch a video (Microsoft Virtual Academy) on unit testing in Python (2m 31s).

Détection et affichage des testsDiscovering and viewing tests

Par convention, Visual Studio identifie les tests comme des méthodes dont le nom commence par test.By convention, Visual Studio identifies tests as methods whose names start with test. Pour voir ce comportement, effectuez les opérations suivantes :To see this behavior, do the following:

  1. Ouvrez un projet Python chargé dans Visual Studio, cliquez avec le bouton droit sur votre projet, sélectionnez Ajouter > Nouvel élément..., puis sélectionnez Python Unit Test (Test unitaire Python) et Ajouter.Open a Python project loaded in Visual Studio, right-click your project, select Add > New Item..., then select Python Unit Test followed by Add.

  2. Cette action crée un fichier test1.py contenant du code qui importe le module unittest standard, dérive une classe de test à partir de unittest.TestCase et appelle unittest.main() si vous exécutez le script directement :This action creates a test1.py file with code that imports the standard unittest module, derives a test class from unittest.TestCase, and invokes unittest.main() if you run the script directly:

    import unittest
    
    class Test_test1(unittest.TestCase):
        def test_A(self):
            self.fail("Not implemented")
    
    if __name__ == '__main__':
        unittest.main()
    
  3. Enregistrez le fichier si nécessaire, puis ouvrez l’Explorateur de tests avec la commande de menu Test > Windows > Explorateur de tests.Save the file if necessary, then open Test Explorer with the Test > Windows > Test Explorer menu command.

  4. L’Explorateur de tests recherche des tests dans votre projet et les affiche, comme indiqué ci-dessous.Test Explorer searches your project for tests and displays them as shown below. Double-cliquez sur un test pour ouvrir son fichier source.Double-clicking a test opens its source file.

    Explorateur de tests indiquant le test_A par défaut

  5. Lorsque vous ajoutez d’autres tests à votre projet, vous pouvez organiser l’affichage dans l’Explorateur de tests à l’aide du menu Regrouper par de la barre d’outils :As you add more tests to your project, you can organize the view in Test Explorer using the group by menu on the toolbar:

    Menu Regrouper par de la barre d’outils de l’Explorateur de tests

  6. Vous pouvez également saisir du texte dans le champ de recherche pour filtrer les tests par nom.You can also enter text in the search field to filter tests by name.

Pour plus d’informations sur le module unittest et sur l’écriture de tests, consultez la documentation Python 2.7 ou la documentation Python 3.4 (python.org).For more information on the unittest module and writing tests, see the Python 2.7 documentation or the Python 3.4 documentation (python.org).

Exécution de testsRunning tests

Dans l’Explorateur de tests, vous pouvez exécuter des tests de plusieurs façons :In Test Explorer you can run tests in a variety of ways:

  • L’option Exécuter tout permet d’exécuter tous les tests affichés (sauf si des filtres sont appliqués).Run All clearly runs all shown tests (subject to filters).
  • Le menu Exécuter... contient des commandes qui vous permettent d’exécuter les tests ayant échoué ou les tests ayant réussi, ou bien de ne pas exécuter de tests en tant que groupe.The Run... menu gives you commands to run failed, passed, or not run tests as a group.
  • Vous pouvez sélectionner un ou plusieurs tests, cliquer dessus avec le bouton droit, puis sélectionner Exécuter les tests sélectionnés.You can select one or more tests, right-click, and select Run Selected Tests.

Les tests s’exécutent en arrière-plan et l’Explorateur de tests met à jour l’état de chaque test à la fin de son exécution :Tests run in the background and Test Explorer updates each test's status as it completes:

  • Les tests réussis sont marqués par une coche verte, accompagnée du temps nécessaire à l’exécution du test :Passing tests show a green rick and the time taken to run the test:

    Réussite de test_A

  • Les tests ayant échoué sont indiqués par une croix rouge accompagnée d’un lien Sortie qui affiche la sortie de la console et la sortie unittest de l’exécution du test :Failed tests show a red cross with an Output link that shows console output and unittest output from the test run:

    Échec de test_A

    Échec de test_A avec motif

Débogage des testsDebugging tests

Étant donné que les tests unitaires sont des éléments de code, ils sont exposés à des bogues tout comme n’importe quel autre code et doivent parfois être exécutés dans un débogueur.Because unit tests are pieces of code, they are subject to bugs just like any other code and occasionally need to be run in a debugger. Dans le débogueur, vous pouvez définir des points d’arrêt, examiner des variables et parcourir le code.In the debugger you can set breakpoints, examine variables, and step through code. Visual Studio fournit également des outils de diagnostic pour les tests unitaires.Visual Studio also provides diagnostic tools for unit tests.

Pour démarrer le débogage, définissez un point d’arrêt initial dans votre code, puis cliquez avec le bouton droit sur le test (ou sur une sélection) dans l’Explorateur de tests et sélectionnez Debug Selected Tests (Déboguer les tests sélectionnés).To start debugging, set an initial breakpoint in your code, then right-click the test (or a selection) in Test Explorer and select Debug Selected Tests. Visual Studio démarre le débogueur Python comme il le ferait pour un code d’application.Visual Studio starts the Python debugger as it would for application code.

Débogage d’un test

Vous pouvez également utiliser les commandes Analyser la couverture du code pour les tests sélectionnés et Profiler le test, selon votre version de Visual Studio (voir la matrice des fonctionnalités).You can also use the Analyze Code Coverage for Selected Tests and Profile Test commands, depending on your version of Visual Studio (see the Features matrix).

Problèmes connusKnown Issues

  • Quand vous démarrez le débogage, Visual Studio semble démarrer et arrêter le débogage, avant de relancer le processus.When starting debugging, Visual Studio appears to start and stop debugging, and then start again. Ce comportement est prévu.This behavior is expected.
  • Quand vous déboguez plusieurs tests, chacun d’eux est exécuté indépendamment, ce qui interrompt la session de débogage.When debugging multiple tests, each one is run independently, which interrupts the debugging session.
  • Visual Studio ne parvient pas toujours à démarrer un test lors du débogage.Visual Studio intermittently fails to start a test when debugging. En règle générale, vous pouvez simplement tenter de relancer le débogage du test.Normally, attempting to debug the test again succeeds.
  • Lors du débogage, il est possible de sortir un test dans l’implémentation unittest.When debugging, it is possible to step out of a test into the unittest implementation. Normalement, l’étape suivante s’exécute jusqu’à la fin du programme et arrête le débogage.Normally, the next step runs to the end of the program and stop debugging.