Überprüfung von Ausnahmen in Python mit doctest

Beim Schreiben von Code in Python müssen wir oft sicherstellen, dass unsere Funktionen wie erwartet funktionieren, insbesondere wenn es um Fehlerbehandlung geht. Ein häufiges Szenario ist das Testen, ob eine Funktion unter bestimmten Bedingungen eine Ausnahme auslöst. Wenn Sie das doctest-Modul von Python verwenden, um Ihre Tests durchzuführen, fragen Sie sich vielleicht: Kann ich überprüfen, dass mit doctest eine Ausnahme ausgelöst wird? Die Antwort lautet: Ja, absolut! Lassen Sie uns erkunden, wie man doctest nutzt, um Ausnahmen in Ihren Python-Funktionen zu überprüfen.

Das Problem: Überprüfung von Ausnahmen

Betrachten Sie eine Funktion namens foo(x). Diese Funktion wurde entworfen, um eine Ausnahme auszulösen, wenn ihr Argument kleiner als null ist. Die zentrale Frage hier ist, wie man einen doctest schreibt, der bestätigt, dass die Funktion in diesem Szenario korrekt funktioniert. Insbesondere wollen wir sicherstellen, dass eine Ausnahme ausgelöst wird, wenn wir einen Wert kleiner als null übergeben.

Beispiel-Funktion

Hier ist eine einfache Version der Funktion foo(x):

def foo(x):
    if x < 0:
        raise ValueError("x muss nicht-negativ sein")
    return x

Die Lösung: Schreiben eines doctest

Um einen doctest zu erstellen, der auf Ausnahmen überprüft, verwenden wir den folgenden Ansatz. In unserem doctest können wir angeben, dass wir erwarten, dass eine Ausnahme ausgelöst wird, wenn foo() mit einem Wert aufgerufen wird, der den Fehler auslösen sollte. So geht’s Schritt für Schritt:

Schritt 1: Schreiben Sie den Doctest

In der Docstring Ihrer Funktion können Sie einen Testfall hinzufügen, der die erwartete Ausnahme demonstriert. So sieht das aus:

def foo(x):
    """
    Gibt x zurück, wenn es nicht-negativ ist.
    
    Löst aus:
        ValueError: Wenn x < 0.
    
    Beispiele:
    >>> foo(-1)
    Traceback (letzter Aufruf zuletzt):
      ...
    ValueError: x muss nicht-negativ sein
    >>> foo(3)
    3
    """
    if x < 0:
        raise ValueError("x muss nicht-negativ sein")
    return x

Schritt 2: Führen Sie den Doctest aus

Um den doctest auszuführen, fügen Sie folgendes Snippet am Ende Ihres Python-Skripts ein:

if __name__ == "__main__":
    import doctest
    doctest.testmod()

Schritt 3: Erwartete Ausgabe

Wenn Sie das Skript ausführen, verarbeitet doctest die Beispiele in der Docstring. Wenn alles korrekt funktioniert, sehen Sie keine Ausgabe (was darauf hinweist, dass alle Tests bestanden wurden). Wenn die Ausnahme nicht wie erwartet ausgelöst wird, wird doctest einen Fehler melden.

Zusätzliche Ressourcen

Für weitere Informationen darüber, wie Sie doctest effektiv in Ihren Modulen verwenden können, besuchen Sie die offizielle doctest-Moduldokumentation.

Fazit

Die Verwendung von doctest, um sicherzustellen, dass Ausnahmen korrekt ausgelöst werden, ist nicht nur möglich; es ist ganz einfach! Indem Sie ein paar Zeilen in der Docstring Ihrer Funktion hinzufügen, können Sie das Verhalten Ihres Codes effektiv dokumentieren und testen, sodass es den erwarteten Mustern entspricht. Wenn Sie neue Funktionen schreiben oder bestehende testen, bietet doctest eine leistungsstarke Möglichkeit, beispielgetriebene Tests direkt neben Ihrem Code einzufügen. Viel Spaß beim Robustmachen Ihres Codes und happy coding!