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: