Was ist Unit Testing?
Unit-Tests in Python werden durchgeführt, um Fehler früh in der Entwicklungsphase der Anwendung zu identifizieren, wenn Fehler weniger häufig auftreten und kostengünstiger zu beheben sind.
Ein Komponententest ist ein in Python geschriebener Test auf Codeebene, mit dem eine kleine "Einheit" der Funktionalität überprüft werden soll. Unit Test ist ein objektorientiertes Framework, das auf Testvorrichtungen basiert.
Python-Unit-Testtechniken
Beim Testen von Python-Einheiten wird hauptsächlich ein bestimmtes Modul getestet, ohne auf abhängigen Code zuzugreifen. Entwickler können Techniken wie Stubs und Mocks verwenden, um Code in "Einheiten" zu trennen und Tests auf Einheitenebene für die einzelnen Teile durchzuführen.
- Testgetriebene Entwicklung TDD: Unit-Tests sollten zusammen mit Python durchgeführt werden, und dafür verwenden Entwickler die testgetriebene Entwicklungsmethode. Bei der TDD-Methode entwerfen Sie zuerst Python-Unit-Tests und schreiben dann den Code, der diese Funktion implementiert.
- Stubs und Mocks: Dies sind zwei Haupttechniken, die gefälschte Methoden simulieren, die getestet werden. Ein Stub wird verwendet, um einige Abhängigkeiten auszufüllen, die erforderlich sind, damit der Komponententest ordnungsgemäß ausgeführt werden kann. Ein Mock hingegen ist ein gefälschtes Objekt, das die Tests ausführt, bei denen wir behaupten.
Die Absichten beider Methoden sind gleich, um das Testen aller Abhängigkeiten einer Klasse oder Funktion zu vermeiden.
Python Unit Testing Framework
Um den Unit-Test-Prozess zu vereinfachen und die Qualität Ihres Projekts zu verbessern, wird das Python Unit-Testing-Framework empfohlen. Das Unit Testing Framework umfasst
- PyUnit: PyUnit unterstützt Geräte, Testfälle, Testsuiten und einen Testläufer zum automatisierten Testen des Codes. In PyUnit können Sie Testfälle in Suiten mit denselben Geräten organisieren
- Nase: Die integrierten Plug-Ins von Nose helfen Ihnen bei der Ausgabeerfassung, Codeabdeckung, Doctests usw. Die Nasensyntax ist ziemlich einfach und verringert die Hindernisse für das Schreiben von Tests. Es erweitert Python unittest, um das Testen zu vereinfachen.
- Doctest: Das Doctest-Testskript wird in der Dokumentzeichenfolge mit einer kleinen Funktion am Ende der Datei ausgeführt. Mit Doctest können Sie Ihren Code testen, indem Sie in der Dokumentation enthaltene Beispiele ausführen und überprüfen, ob sie die erwarteten Ergebnisse zurückgeben. Der Anwendungsfall von doctest ist weniger detailliert und erfasst keine Sonderfälle. Sie sind nützlich als aussagekräftige Dokumentation des Hauptanwendungsfalls eines Moduls und seiner Komponenten.
Unit Testing mit PyUnit
Pyunit ist ein Python-Port von JUnit. Als Teil von Pyunit gibt es im unittest-Modul fünf Schlüsselklassen.
- TestCase-Klasse : Die TestCase-Klasse enthält die Testroutinen und liefert Hooks für die Erstellung jeder Routine und die anschließende Bereinigung
- TestSuite-Klasse : Sie dient als Auflistungscontainer und kann mehrere Testfallobjekte und mehrere Testsuites-Objekte besitzen
- TestLoader-Klasse : Diese Klasse lädt lokal oder aus einer externen Datei definierte Testfälle und Suites. Es werden Objekte einer Testsuite ausgegeben, die diese Suiten und Fälle besitzen
- TextTestRunner-Klasse : Um die Tests auszuführen, wird eine Standardplattform zum Ausführen der Tests bereitgestellt
- Die TestResults-Klasse : Sie bietet einen Standardcontainer für die Testergebnisse
Entwerfen eines Testfalls für Python-Tests mit PyUnit
Ein Komponententest bietet eine Basisklasse, einen Testfall, mit dem neue Testfälle erstellt werden können. Für die Gestaltung des Testfalls werden drei Methoden verwendet
unittest.TestCase
setUp()teardown()skipTest(aMesg:string)fail(aMesg:string)id():stringshortDescription():string
Im ersten Satz befinden sich die Haken vor und nach dem Test. Die setup () -Methode beginnt vor jeder Testroutine, der Teardown () nach der Routine.
Der zweite Satz von Methoden steuert die Testausführung. Beide Methoden verwenden eine Nachrichtenzeichenfolge als Eingabe und brechen einen laufenden Test ab. Die skiptest () -Methode bricht den aktuellen Test jedoch ab, während die fail () -Methode ihn vollständig fehlschlägt.
Die letzte oder dritte Methode hilft bei der Bestimmung des Tests. Die Methode id () gibt eine Zeichenfolge zurück, die aus dem Namen des Testfallobjekts und der Testroutine besteht. Und die Methode shortDescription () gibt den docstr-Kommentar zu Beginn jeder Testroutine zurück.
Vorteile der Verwendung von Python Unit-Tests
- Es hilft Ihnen, Fehler früh im Entwicklungszyklus zu erkennen
- Es hilft Ihnen, bessere Programme zu schreiben
- Es lässt sich problemlos mit anderen Testmethoden und -werkzeugen synchronisieren
- Es wird viel weniger Fehler geben
- Es ist einfacher, in Zukunft mit sehr wenig Konsequenz zu modifizieren