Unit Testing in Python mit pytest: Einfache Anleitung für Anfänger

Unit Testing in Python mit pytest: Einfache Anleitung für Anfänger

Lerne, wie man Unit Tests in Python mit pytest erstellt und ausführt. Diese einfache Anleitung für Anfänger zeigt die Grundlagen und bietet praktische Beispiele.

In der heutigen Softwareentwicklung ist es wichtig, sicherzustellen, dass unser Code zuverlässig und fehlerfrei ist. Eine Methode, um das zu gewährleisten, sind Unit Tests. In diesem Blogpost zeige ich dir, wie du Unit Tests in Python mit dem beliebten Test-Framework pytest erstellen und ausführen kannst.

Was ist Unit Testing?

Unit Testing ist eine Technik, bei der einzelne Einheiten oder Komponenten eines Programms getestet werden, um sicherzustellen, dass sie wie erwartet funktionieren. Eine “Einheit” kann dabei eine Funktion, eine Methode oder eine Klasse sein. Unit Tests helfen dabei, Fehler frühzeitig zu erkennen und zu beheben, bevor sie in die Produktion gelangen.

Warum pytest?

pytest ist ein weit verbreitetes und leistungsfähiges Test-Framework für Python. Es ist einfach zu bedienen, flexibel und bietet viele nützliche Funktionen wie:

  • Einfache Syntax
  • Automatische Erkennung von Testfunktionen
  • Umfangreiche Plugin-Unterstützung
  • Ausführliche und gut lesbare Fehlerberichte

Installation von pytest

Bevor wir mit dem Schreiben von Tests beginnen können, müssen wir pytest installieren. Das geht ganz einfach mit pip:

pip install pytest

Schreiben deines ersten Unit Tests

Nehmen wir an, wir haben eine einfache Funktion add, die zwei Zahlen addiert:

def add(a, b):
    return a + b

Um diese Funktion zu testen, erstellen wir eine neue Datei namens test_math.py und schreiben unseren ersten Test:

def test_add():
    assert add(1, 2) == 3
    assert add(-1, 1) == 0
    assert add(-1, -1) == -2

In diesem Test haben wir drei verschiedene Fälle: Addition von zwei positiven Zahlen, Addition einer positiven und einer negativen Zahl sowie Addition von zwei negativen Zahlen.

Ausführen der Tests

Um unsere Tests auszuführen, öffnest du ein Terminal und gibst den folgenden Befehl ein:

pytest

pytest sucht automatisch nach allen Dateien, die mit test_ beginnen oder auf _test.py enden, und führt die darin enthaltenen Tests aus. Wenn alle Tests bestanden werden, siehst du eine Erfolgsmeldung. Falls ein Test fehlschlägt, zeigt pytest detaillierte Informationen an, warum der Test fehlgeschlagen ist.

Erweiterte Testfunktionen

pytest bietet viele weitere nützliche Funktionen, wie z.B. das Testen von Ausnahmen und das Parametrisieren von Tests.

Testen von Ausnahmen

Manchmal möchtest du sicherstellen, dass eine Funktion eine bestimmte Ausnahme auslöst. Angenommen, wir haben eine Funktion divide, die zwei Zahlen dividiert:

def divide(a, b):
    if b == 0:
        raise ValueError("Division durch Null ist nicht erlaubt")
    return a / b

Wir können einen Test schreiben, der überprüft, ob die Funktion bei einer Division durch Null eine ValueError auslöst:

import pytest

def test_divide():
    with pytest.raises(ValueError):
        divide(1, 0)

Parametrisieren von Tests

Mit pytest kannst du Tests parametrisieren, um sie mit verschiedenen Eingabewerten auszuführen. Das spart Zeit und reduziert den Codeaufwand:

@pytest.mark.parametrize("a, b, result", [
    (1, 2, 3),
    (-1, 1, 0),
    (-1, -1, -2),
])
def test_add(a, b, result):
    assert add(a, b) == result

Hier wird der Test test_add dreimal mit unterschiedlichen Werten für a, b und result ausgeführt.

Abschließende Gedanken

Unit Testing ist ein wichtiger Bestandteil der Softwareentwicklung und pytest macht es einfach, robuste und gut strukturierte Tests zu schreiben. Mit den grundlegenden Kenntnissen, die du in diesem Blogpost erworben hast, kannst du nun deine eigenen Unit Tests schreiben und sicherstellen, dass dein Python-Code zuverlässig und fehlerfrei ist.