Schreiben von Unittests für Python mit Test-Explorer in Visual Studio

Komponententests sind Codeelemente, die andere Codeeinheiten in einer Anwendung testen, in der Regel isolierte Funktionen, Klassen usw. Wenn eine Anwendung alle Unittests besteht, können Sie sicher sein, dass zumindest die Low-Level-Programmfunktionalität korrekt ist.

In Python werden Komponententests ausgiebig zum Überprüfen von Szenarien beim Entwurf eines Programms verwendet. Die Python-Unterstützung in Visual Studio umfasst das Ermitteln, Ausführen und Debuggen von Unittests im Kontext Ihres Entwicklungsprozesses, sodass sie nicht separat ausgeführt werden müssen.

Dieser Artikel enthält eine kurze Übersicht über die Komponententestfunktionen in Visual Studio mit Python. Weitere Informationen zu Komponententests im Allgemeinen finden Sie unter Komponententest für Code.

Voraussetzungen

Visual Studio für Mac wird nicht unterstützt. Weitere Informationen finden Sie unter Was passiert mit Visual Studio für Mac? Visual Studio Code unter Windows, Mac und Linux funktioniert gut mit Python über verfügbare Erweiterungen.

Auswählen des Testframeworks für ein Python-Projekt

Visual Studio unterstützt zwei Testframeworks für Python: unittest und pytest (verfügbar in Visual Studio 2019 Version 16.3 und höher). Standardmäßig ist kein Framework ausgewählt, wenn Sie ein Python-Projekt erstellen.

Führen Sie die folgenden Schritte aus, um das Testframework für Ihr Python-Projekt auszuwählen:

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, und wählen Sie Eigenschaften aus.

  2. Wählen Sie im Bereich Projekteigenschaften die Registerkarte Test und dann ihren Testframeworktyp aus:

    • Für das UnitTest-Framework weist Visual Studio das Stammverzeichnis des Projekts für die Testermittlung zu. Der Standardwert lautet ., Sie können jedoch einen anderen Speicherort angeben, wenn Sie die Projekteinstellungen konfigurieren. Sie können auch eine oder mehrere Zeichenfolgen für das Muster des Testdateinamens angeben, z. B. test*.py, test_*.py.

    • Für das pytest-Framework werden Testoptionen wie „Testspeicherort“ und „Dateinamenmuster“ mithilfe der .ini-Standardkonfigurationsdatei von pytest festgelegt. Standardmäßig wird der Arbeitsbereichs-/Projektordner für den Speicherort verwendet. Das Standarddateinamemuster enthält test_*py und *_test.py. Weitere Informationen finden Sie in der pytest-Referenzdokumentation.

    Hinweis

    Beachten Sie beim Definieren des Dateinamenmusters, dass Sonderzeichen wie der Unterstrich (_) nicht mit dem Platzhalter (*) übereinstimmen. Wenn Sie Sonderzeichen im Dateinamen verwenden möchten, geben Sie diese Zeichen in der Musterdefinition an, z. B. test_*.py.

  3. Zum Speichern der Frameworkauswahl und -einstellungen können Sie den Tastaturkurzbefehl STRG+S verwenden.

Nachdem Sie das Framework konfiguriert haben, initiiert Visual Studio die Testermittlung und öffnet den Test-Explorer.

Konfigurieren von Tests für Python ohne ein Projekt

Mit Visual Studio können Sie vorhandenen Python-Code ohne ein Projekt ausführen und testen, indem Sie einen Ordner mit Python-Code öffnen. In diesem Szenario müssen Sie eine PythonSettings.json-Datei zum Konfigurieren der Tests verwenden.

  1. Öffnen Sie Ihren vorhandenen Python-Code mithilfe der Option Lokalen Ordner öffnen:

    Screenshot, der zeigt, wie die Option Öffnen eines lokalen Ordners beim Start von Visual Studio 2022 ausgewählt wird.

    Screenshot, der zeigt, wie die Option Öffnen eines lokalen Ordners beim Start von Visual Studio ausgewählt wird.

  2. Wenn Sie einen Python-Ordner öffnen, erstellt Visual Studio mehrere ausgeblendete Ordner für die Verwaltung von Einstellungen für das Programm. Wählen Sie zum Anzeigen dieser Ordner (sowie anderer ausgeblendeter Dateien und Ordner wie .git) in Projektmappen-Explorer die Symbolleistenoption Alle Dateien anzeigen aus:

    Screenshot, der zeigt, wie ausgeblendete Ordner und Dateien in Projektmappen-Explorer in Visual Studio 2022 angezeigt werden.

    Screenshot, der zeigt, wie versteckte Ordner und Dateien im Projektmappen-Explorer von Visual Studio angezeigt werden können.

  3. Erweitern Sie in Projektmappen-Explorer den Ordner Lokale Einstellungen, und doppelklicken Sie auf die Datei PythonSettings.json, um die Datei im Editor zu öffnen.

    Hinweis

    Die meisten Konfigurationen zeigen zwei Einstellungsdateien an: PythonSettings.json und ProjectSettings.json. Für diese Übung müssen Sie die Datei PythonSettings.json ändern.

    Wenn Sie die Datei PythonSettings.json nicht im Ordner Lokale Einstellungen finden können, können Sie sie manuell erstellen:

    1. Klicken Sie mit der rechten Maustaste auf den Ordner Lokale Einstellungen und wählen Sie Hinzufügen>Neue Datei aus.

    2. Benennen Sie die Datei PythonSettings.json und wählen Sie Eingeben aus, um Ihre Änderungen zu speichern.

    Die neue Datei wird in Visual Studio automatisch in einem Editor geöffnet.

  4. Fügen Sie in der Datei PythonSettings.json den folgenden Code hinzu, um die TestFramework zu definieren. Legen Sie den Framework-Wert je nach gewünschtem Testframework auf pytest oder unittest fest:

    {
      "TestFramework": "unittest",
      "UnitTestRootDirectory": "testing",
      "UnitTestPattern": "test_*.py"
    }
    
    • Wenn Sie für das Unittest-Framework keine spezifischen Werte für die Einstellungen UnitTestRootDirectory und UnitTestPattern in der Datei PythonSettings.json definieren, fügt Visual Studio diese Felder automatisch mit den Standardwerten . bzw. test*.py hinzu.

    • Für das pytest-Framework werden Konfigurationsoptionen immer in der pytest-.ini-Konfigurationsdatei und nicht über Visual-Studio-Einstellungen angegeben.

  5. Wenn Ihr Python-Programm einen src-Ordner getrennt vom Ordner enthält, der Ihre Tests enthält, geben Sie den Pfad zum src-Ordner mit der SearchPaths-Einstellung in der Datei PythonSettings.json an:

      "SearchPaths": [".\\src"]
    
  6. Speichern Sie Ihre Änderungen an der Datei PythonSettings.json.

Nachdem Sie das Framework konfiguriert haben, initiiert Visual Studio die Testermittlung für das angegebene Framework. Sie können im Test-Explorer auf den Test zugreifen.

Hinzufügen und Entdecken von Tests

Visual Studio identifiziert Tests von UnitTest und pytest als Methoden, deren Namen mit test beginnen.

Führen Sie die folgenden Schritte aus, um zu sehen, wie Visual Studio die Testermittlung initiiert:

  1. Öffnen Sie ein Python-Projekt in Visual Studio.

  2. Legen Sie die Eigenschaften des Test-Frameworks für das Projekt fest, wie im Wählen Sie das Test-Framework für das Python-Projekt aus beschrieben.

  3. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Hinzufügen>Neues Element aus.

    1. Wählen Sie im Dialog Neues Element hinzufügen den Dateityp Python-Unittest.

    2. Geben Sie einen Dateinamen ein, der der Musterdefinition entspricht, die Sie für die Projekteigenschaften angegeben haben.

    3. Wählen Sie Hinzufügen aus.

  4. Visual Studio erstellt die Testdatei mit Standardcode:

    import unittest
    
    class Test_test1(unittest.TestCase):
        def test_A(self):
            self.fail("Not implemented")
    
    if __name__ == '__main__':
        unittest.main()
    

    Dieser Code importiert das Standardmodul unittest und leitet eine Testklasse von der unittest.TestCase-Methode ab. Wenn Sie das Skript direkt ausführen, ruft dieser Code auch die unittest.main()-Funktion auf.

Wenn Sie neue Testdateien hinzufügen, stellt Visual Studio sie im Test-Explorer zur Verfügung.

Anzeigen von Komponententests mit dem Test-Explorer

Nachdem Sie Ihr Test-Framework und Testdateien konfiguriert haben, sucht Visual Studio nach Tests und zeigt sie im Test-Explorer an.

Im Folgenden finden Sie einige Möglichkeiten zum Arbeiten mit dem Test-Explorer:

  • Öffnen Sie das Fenster Test-Explorer, indem Sie Test>Test-Explorer auswählen.

  • Wenn das Fenster Test-Explorer geöffnet ist, verwenden Sie den Tastaturkurzbefehl STRG+R, A, um die Testermittlung auszulösen.

  • Doppelklicken Sie im Test-Explorer auf einen Test, um die entsprechende Quelldatei im Editor zu öffnen:

    Der Screenshot zeigt die Standardansicht für einen Test in Test-Explorer in Visual Studio 2022.

    Der Screenshot zeigt die Standardansicht für einen Test in Test-Explorer.

  • Organisieren Sie die Ansicht Ihrer Tests mithilfe der Option Gruppieren nach auf der Symbolleiste:

    Der Screenshot zeigt, wie die Ansicht der Tests im Test-Explorer mit der Option Gruppieren nach in Visual Studio 2022 organisiert werden kann.

    Der Screenshot zeigt, wie die Ansicht der Tests im Test-Explorer mit der Option Gruppieren nach organisiert werden kann.

  • Filtern Sie Tests nach Namen, indem Sie Text in das Suchfeld eingeben:

    Screenshot, der zeigt, wie die Ansicht der Tests im Test-Explorer mithilfe des Suchfelds gefiltert wird.

    Screenshot, der zeigt, wie die Ansicht der Tests im Test-Explorer mithilfe des Suchfelds gefiltert wird.

  • Führen Sie Tests aus und zeigen Sie den Status für den Testlauf an, wie im nächsten Abschnitt beschrieben.

Weitere Informationen zum unittest-Modul und zum Schreiben von Tests finden Sie in der Python-Dokumentation.

Ausführen von Komponententests mit dem Test-Explorer

Im Test-Explorer können Sie Tests auf verschiedene Weise ausführen:

  • Wählen Sie Alle ausführen (Tests in der Ansicht) aus, um alle in der aktuellen Ansicht angezeigten Tests basierend auf Ihren Filtereinstellungen auszuführen.
  • Verwenden Sie die Befehle im Menü Ausführen, um fehlgeschlagene, bestandene oder nicht ausgeführte Tests als Gruppe auszuführen.
  • Wählen Sie einen oder mehrere Tests aus, klicken Sie dann mit der rechten Maustaste und wählen Sie die Option Ausgewählte Tests ausführen.

Visual Studio führt Ihre Tests im Hintergrund aus. Test-Explorer aktualisiert den Status für jeden Test, sobald er abgeschlossen ist:

  • Erfolgreiche Tests zeigen ein grünes Häkchen und die Zeit bis zum Abschluss des Testlaufs an:

    Screenshot, der den Status für einen erfolgreichen Test in Test Explorer in Visual Studio 2022 zeigt.

    Screenshot, der den Status für einen erfolgreichen Test in Test-Explorer zeigt.

  • Fehlerhafte Tests werden mit einem roten X markiert und mit einem Link Ausgabe versehen, unter dem die Konsolenausgabe und die unittest-Ausgabe aus dem Testlauf angezeigt wird:

    Screenshot, der den Status und die Gründe für einen fehlgeschlagenen Test im Test-Explorer in Visual Studio 2022 anzeigt.

    Screenshot, der den Status eines fehlgeschlagenen Tests in Test-Explorer zeigt.

    Screenshot, der den Grund für einen fehlgeschlagenen Test in Test-Explorer anzeigt.

Überprüfen von Tests mit dem Debugger

Unittests sind Codeteile, die genau wie jeder andere Code Fehler aufweisen können und müssen gelegentlich in einem Debugger ausgeführt werden. Im Visual Studio Debugger können Sie Haltepunkte setzen, Variablen untersuchen und Code durchlaufen. Visual Studio bietet auch Diagnosetools für Unittests.

Überprüfen Sie die folgenden Punkte zum Überprüfen Ihrer Tests mit dem Visual Studio-Debugger:

  • Standardmäßig verwendet das Test-Debuggen den debugpy-Debugger für Visual Studio 2019 Version 16.5 und höher. In einigen früheren Versionen von Visual Studio wird der ptvsd 4-Debugger verwendet. Wenn Sie eine frühere Version von Visual Studio verwenden und den ptvsd 3-Debugger bevorzugen, wählen Sie die Option Vorversion-Debugger verwenden unter Tools>Optionen>Python>Debugging aus.

  • Um mit dem Debuggen zu beginnen, legen Sie einen anfänglichen Haltepunkt im Code fest, klicken Sie im Test-Explorer mit der rechten Maustaste auf den Test (oder eine Auswahl), und wählen Sie Ausgewählte Tests debuggen aus. Visual Studio startet den Python-Debugger auf dieselbe Weise wie für Anwendungscode.

    Screenshot, der zeigt, wie man einen Unittest mit dem Visual Studio 2022 Debugger debuggt.

    Screenshot, der zeigt, wie man einen Unittest mit dem Visual Studio Debugger debuggt.

  • Wenn Sie es vorziehen, können Sie die Funktion Code Coverage für ausgewählte Tests analysieren verwenden. Weitere Informationen finden Sie unter Bestimmen des Umfangs des zu testenden Codes mithilfe von Code Coverage.