Einführung
Unit-Tests sind ein wesentlicher Bestandteil der Entwicklung robuster, wartbarer Software. Durch das Schreiben von Tests für einzelne Codeeinheiten stellen Sie sicher, dass sich Ihre Funktionen wie erwartet verhalten und können Fehler frühzeitig im Entwicklungsprozess erkennen. In diesem Handbuch stellen wir Ihnen pytest vor - ein leistungsfähiges Test-Framework für Python - und zeigen Ihnen, wie Sie Tests schreiben, testgetriebene Entwicklung (TDD) betreiben und Beispiele aus der Praxis in Ihren Arbeitsablauf einbauen.
Warum Unit-Tests und TDD?
Testen hilft Ihnen, Fehler frühzeitig zu erkennen und gibt Ihnen die Sicherheit, den Code zu überarbeiten, ohne die Funktionalität zu beeinträchtigen. Die testgetriebene Entwicklung (TDD) geht noch einen Schritt weiter, indem sie Tests vor dem eigentlichen Code schreibt, die Ihr Design leiten und eine robuste Codebasis sicherstellen.
Erste Schritte mit pytest
Installieren von pytest
Um zu beginnen, installiere pytest mit pip:
pip install pytest
Schreiben Sie Ihren ersten Test
Erstellen wir eine einfache Funktion und schreiben wir einen Test für sie. Angenommen, wir haben eine add
Funktion:
def add(a, b):
return a + b
Erstellen Sie nun einen Test für diese Funktion:
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
Um den Test auszuführen, führen Sie pytest
in Ihrem Terminal aus.
Testgetriebene Entwicklung (TDD) mit pytest
TDD beinhaltet das Schreiben von Tests vor dem Schreiben des Codes. Hier ist ein einfacher Arbeitsablauf:
- Schreiben Sie einen Test, der das gewünschte Verhalten einer Funktion definiert.
- Führen Sie den Test aus, um zu sehen, ob er fehlschlägt.
- Schreiben Sie den minimal notwendigen Code, um den Test zu bestehen.
- Refactoring des Codes, wenn nötig, und Wiederholung.
Beispiel: TDD Arbeitsablauf
Angenommen, wir brauchen eine Funktion multiply
, die zwei Zahlen multipliziert. Wir beginnen mit dem Schreiben eines Tests:
def test_multiply():
assert multiply(3, 4) == 12
assert multiply(-2, 5) == -10
Starten Sie pytest, und Sie werden sehen, dass der Test fehlschlägt, weil multiply
nicht definiert ist. Implementieren Sie nun die Funktion:
def multiply(a, b):
return a * b
Führen Sie pytest erneut aus, um sicherzustellen, dass der Test erfolgreich ist.
Erweiterte pytest-Funktionen
Parametrisierte Tests
pytest ermöglicht es Ihnen, eine Testfunktion mit verschiedenen Eingabesätzen auszuführen, indem Sie den @pytest.mark.parametrize
Dekorator verwenden.
#| label: parameterized-tests, code-fold: true
import pytest
@pytest.mark.parametrize("a,b,expected", [
2, 3, 6),
(5, 5, 25),
(-1, 8, -8),
(
])def test_multiply_param(a, b, expected):
assert multiply(a, b) == expected
Fixtures in pytest
Fixtures in pytest
ermöglichen es Ihnen, Daten oder Zustände vor der Ausführung von Tests einzurichten und danach aufzuräumen.
import pytest
@pytest.fixture
def sample_data():
return [1, 2, 3, 4, 5]
def test_sum(sample_data):
assert sum(sample_data) == 15
Best Practices für Unit-Tests
- Schreiben Sie Tests für jede Funktion:
Stellen Sie sicher, dass jede Einheit Ihres Codes über entsprechende Tests verfügt. - Tests unabhängig halten:
Tests sollten nicht voneinander abhängen; jeder Test sollte seinen eigenen Kontext aufbauen. - Beschreibende Testnamen verwenden:
Benennen Sie Ihre Testfunktionen klar und deutlich, damit Fehler leicht zu diagnostizieren sind. - Fixtures und Parametrisierung nutzen:
Nutzen Sie diese Funktionen, um sauberere und effizientere Tests zu schreiben. - Tests häufig ausführen:
Integrieren Sie Tests in Ihren Entwicklungsprozess, um Probleme frühzeitig zu erkennen.
Schlussfolgerung
Durch den Einsatz von pytest und TDD-Praktiken können Sie eine robuste Testsuite erstellen, die die Codequalität und -zuverlässigkeit verbessert. Dieser Leitfaden führt Sie in die Grundlagen des Schreibens von Tests, das Erstellen von Fixtures, das Parametrisieren von Tests und das Befolgen von TDD-Workflows in Python ein. Mit diesen Tools sind Sie besser für die Wartung und Skalierung Ihrer Projekte gerüstet.
Weiterführende Literatur
- Python-Automatisierung: Zeitplanung und Aufgabenautomatisierung
- Erstellung von REST-APIs mit FastAPI: Ein modernes Python-Framework
Viel Spaß beim Testen und bei der Entwicklung zuverlässiger Python-Anwendungen mit pytest!
Weitere Artikel erkunden
Hier finden Sie weitere Artikel aus derselben Kategorie, die Ihnen helfen, tiefer in das Thema einzutauchen.
Wiederverwendung
Zitat
@online{kassambara2024,
author = {Kassambara, Alboukadel},
title = {Unit-Tests in Python mit pytest: Ein umfassender Leitfaden},
date = {2024-02-08},
url = {https://www.datanovia.com/de/learn/programming/python/tools/pytest-unit-testing.html},
langid = {de}
}