PyUnit-Tutorial: Python Unit-Test-Framework (mit Beispiel)

⚡ Intelligente Zusammenfassung

Python Unit-Tests prüfen kleine Codeabschnitte isoliert, um Fehler frühzeitig zu erkennen. Hier lernen Sie Unit-Testing-Techniken, das PyUnit-Framework (unittest), seine wichtigsten Klassen, die Erstellung von Testfällen und ein praktisches Beispiel kennen.

  • 🧪 Was es ist: Unit-Tests überprüfen kleine, isolierte Codeeinheiten, um Fehler frühzeitig zu erkennen.
  • 🔬 Techniken: TDD, Stubs und Mocks isolieren den Code, sodass Unit-Tests unabhängig voneinander durchgeführt werden können.
  • 🐍 PyUnit: PythonDas in PyUnit integrierte unittest-Modul ist eine Portierung von JUnit.
  • 🧱 Wichtige Klassen: TestCase, TestSuite, TestLoader, TextTestRunner und TestResults.
  • 🤖 KI-Hilfe: KI-Tools wie Copilot generieren sofort Unittest-Testfälle.

Python Unit Tests

Was ist Unit Testing?

Unit Tests in Python wird durchgeführt, um Fehler frühzeitig in der Entwicklungsphase der Anwendung zu erkennen, wenn Fehler seltener auftreten und ihre Behebung kostengünstiger ist.

Ein Unit-Test ist ein Test auf Skript-Code-Ebene, der in Python um eine kleine „Einheit“ der Funktionalität zu überprüfen. Unit-Test ist ein objektorientiertes Framework, das auf Testvorrichtungen basiert.

Python Unit-Testtechniken

Python Beim Unit-Testing geht es hauptsächlich darum, ein bestimmtes Modul zu testen, ohne auf abhängigen Code zuzugreifen. Entwickler können Techniken wie Stubs und Mocks verwenden, um Code in „Einheiten“ aufzuteilen und Unit-Level-Tests für die einzelnen Teile durchzuführen.

  • Testgetriebene Entwicklung TDD: Unit-Tests sollten zusammen mit den Python, und dafür verwenden Entwickler die Methode der testgetriebenen Entwicklung. Bei der TDD-Methode entwerfen Sie zuerst Python Führen Sie Unit-Tests durch und erst dann fahren Sie mit dem Schreiben des Codes fort, der diese Funktion implementiert.
  • Stubs und Mocks: Dabei handelt es sich um zwei Haupttechniken, die gefälschte Methoden simulieren, die getestet werden. A Stummel wird verwendet, um einige Abhängigkeiten auszufüllen, die für die ordnungsgemäße Ausführung des Komponententests erforderlich sind. A Spotten Auf der anderen Seite handelt es sich um ein gefälschtes Objekt, das die Tests ausführt, bei denen wir „assertieren“ setzen.

    Die Absichten beider Methoden sind dieselben: Sie eliminieren das Testen aller Abhängigkeiten einer Klasse oder Funktion.

Python Framework für Unit-Tests

Um den Unit-Test-Prozess zu vereinfachen und die Qualität Ihres Projekts zu verbessern, wird empfohlen, Python Das Unit-Testing-Framework umfasst

Python Unit-Testtechniken

  • PyUnit: PyUnit unterstützt Fixtures, Testfälle, Testsuiten und einen Test Runner zum automatisierten Testen des Codes. In PyUnit können Sie Testfälle in Suiten mit denselben Vorrichtungen organisieren
  • Nase: Die integrierten Plug-Ins von Nose helfen Ihnen bei der Ausgabeerfassung, Codeabdeckung, Doctests usw. Die Nose-Syntax ist ziemlich einfach und reduziert die Hürden beim Schreiben von Tests. Es erweitert Python unittest, um das Testen zu vereinfachen.
  • Doktortest: Das Doctest-Testskript befindet sich in der Dokumentzeichenfolge mit einer kleinen Funktion am Ende der Datei. 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 lieferten. Der Anwendungsfall von doctest ist weniger detailliert und berücksichtigt keine Sonderfälle. Sie eignen sich als aussagekräftige Dokumentation des Hauptanwendungsfalls eines Moduls und seiner Komponenten.

Unit-Tests mit PyUnit

Pyunit ist ein Python Hafen von JUnit. Als Teil von Pyunit gibt es im Unittest-Modul fünf Schlüsselklassen.

Unit-Tests mit PyUnit

  • Testfallklasse: Die TestCase-Klasse enthält die Testroutinen und liefert Hooks zum Erstellen jeder Routine und zum anschließenden Aufräumen
  • TestSuite-Klasse: Es dient als Sammelcontainer und kann mehrere Testcase-Objekte und mehrere Testsuite-Objekte enthalten
  • TestLoader-Klasse: Diese Klasse lädt Testfälle und Suiten, die lokal oder aus einer externen Datei definiert sind. Es gibt Testsuite-Objekte aus, die diese Suiten und Fälle besitzen
  • TextTestRunner-Klasse: Zur Ausführung der Tests wird eine Standardplattform zur Ausführung der Tests bereitgestellt
  • Die TestResults-Klasse: Es bietet einen Standardbehälter für die Testergebnisse

Entwerfen eines Testfalls für Python Testen mit PyUnit

Ein Unit-Test stellt eine Basisklasse, einen Testfall, bereit, der zum Erstellen neuer Testfälle verwendet werden kann. Für den Entwurf des Testfalls werden drei Methodensätze verwendet

Entwerfen eines Testfalls für Python

unittest.TestCase

setUp()
teardown()

skipTest(aMesg:string)
fail(aMesg:string)

id():string
shortDescription():string

Im ersten Satz befinden sich die Pre- und Post-Test-Haken. Die Methode setup() beginnt vor jeder Testroutine, die Methode teardown() nach der Routine.

Der zweite Methodensatz steuert die Testausführung. Beide Methoden verwenden eine Nachrichtenzeichenfolge als Eingabe und brechen einen laufenden Test ab. Aber die Methode „skiptest()“ bricht den aktuellen Test ab, während die Methode „fail()“ ihn vollständig fehlschlägt.

Die letzte bzw. dritte Methode dient der Bestimmung des Tests. Die Methode id() gibt einen String zurück, der aus dem Namen des Testfallobjekts und der Testroutine besteht. Und die Methode shortDescription() gibt den Docstr-Kommentar zu Beginn jeder Testroutine zurück.

Python Beispiel für einen Unit-Test

Das folgende Beispiel testet eine einfache add()-Funktion mit dem unittest-Modul. Jede Methode mit dem Präfix test_ wird automatisch ausgeführt, und assertEqual vergleicht das Ergebnis mit dem erwarteten Wert.

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()

Speichern Sie den Code und führen Sie ihn mit `python filename.py` aus. Der Unittest-Runner meldet, wie viele Tests bestanden oder fehlgeschlagen sind.

Vorteile der Verwendung Python Unit-Test

  • Es hilft Ihnen, Fehler frühzeitig im Entwicklungszyklus zu erkennen
  • Es hilft Ihnen, bessere Programme zu schreiben
  • Es lässt sich problemlos mit anderen Testmethoden und -tools synchronisieren
  • Es wird viel weniger Fehler geben
  • Es ist einfacher, sie in Zukunft mit sehr geringeren Konsequenzen zu ändern

Häufig gestellte Fragen

Unit-Tests überprüfen eine kleine Codeeinheit, beispielsweise eine Funktion, isoliert. Sie decken Fehler frühzeitig in der Entwicklung auf, wenn diese noch kostengünstiger und einfacher zu beheben sind.

PyUnit ist PythonDas integrierte Unit-Testing-Framework ist als unittest-Modul verfügbar. Es handelt sich um eine Portierung von JUnit und unterstützt Testumgebungen, Testfälle, Testsuiten und einen Test-Runner.

Erstellen Sie eine Unterklasse von `unittest.TestCase`, schreiben Sie Methoden, die mit `test_` beginnen, und verwenden Sie darin Assertions wie `assertEqual`. Führen Sie die Datei mit `unittest.main()` aus, um alle Tests zu testen.

Die Methode `setUp()` wird vor jeder Testmethode ausgeführt, um die Testdaten vorzubereiten, während `tearDown()` nach jedem Test die erforderlichen Aufräumarbeiten durchführt. Zusammen gewährleisten sie die Unabhängigkeit und Reproduzierbarkeit der Tests.

Stubs liefern feste Daten, von denen ein Test abhängt, während Mocks simulierte Objekte sind, gegen die man Assertions durchführt. Beide ersetzen reale Abhängigkeiten, sodass eine Einheit isoliert getestet werden kann.

KI-Assistenten wie GitHub Copilot generieren Unittest-Testfälle aus einer Funktion, schlagen Grenzfälle und Assertions vor und erstellen Mocks für Abhängigkeiten, während Sie Code schreiben.

Ja. KI-gestützte Tools können die Generierung von Testsuiten automatisieren, Zusicherungen für erwartete Ausgaben erzeugen und die Codeabdeckung erhöhen, indem sie Tests für ungetestete Zweige vorschlagen.

unittest ist PythonDas integrierte Framework von verwendet Klassen und Assert-Methoden, während pytest eine Drittanbieterbibliothek mit einfacheren Assert-Anweisungen und leistungsstarken Fixtures ist. Beide führen Unit-Tests aus.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: