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 auf Windows wurde mit Unterstützung für Python-Workloads installiert. Weitere Informationen finden Sie unter Installieren von Python-Unterstützung in Visual Studio.
Ein Python-Projekt mit Code oder einem Ordner mit Python-Code.
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:
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, und wählen Sie Eigenschaften aus.
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
.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.
Öffnen Sie Ihren vorhandenen Python-Code mithilfe der Option Lokalen Ordner öffnen:
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:
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:
Klicken Sie mit der rechten Maustaste auf den Ordner Lokale Einstellungen und wählen Sie Hinzufügen>Neue Datei aus.
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.
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
undUnitTestPattern
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.
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"]
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:
Öffnen Sie ein Python-Projekt in Visual Studio.
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.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Hinzufügen>Neues Element aus.
Wählen Sie im Dialog Neues Element hinzufügen den Dateityp Python-Unittest.
Geben Sie einen Dateinamen ein, der der Musterdefinition entspricht, die Sie für die Projekteigenschaften angegeben haben.
Wählen Sie Hinzufügen aus.
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 derunittest.TestCase
-Methode ab. Wenn Sie das Skript direkt ausführen, ruft dieser Code auch dieunittest.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:
Organisieren Sie die Ansicht Ihrer Tests mithilfe der Option Gruppieren nach auf der Symbolleiste:
Filtern Sie Tests nach Namen, indem Sie Text in das Suchfeld eingeben:
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:
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:
Ü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.
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.