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.