Kapitel 10 · Übung
Ein echtes Projekt testen
Einen Test installieren und finden lassen
Der Katalog hat Prüfungen an der echten Kommandozeile und an seinen Fehlergrenzen bestanden. Was noch fehlt, ist eine im Projekt gespeicherte Möglichkeit, diese Erwartungen nach der nächsten Änderung erneut zu prüfen. Mache zunächst den Test-Runner reproduzierbar, so wie du in Kapitel 3 die Installation eines Pakets reproduzierbar gemacht hast.
Erstelle eine vorübergehende Umgebung und installiere die geprüfte Version aus dem Paketspiegel:
python -m venv .venv
.venv/bin/python -m pip install pytest==9.1.1
nano requirements.txt
.venv/bin/python -m pytest --version
Schreibe genau eine Zeile in die Datei, pytest==9.1.1, und speichere sie. Der letzte Befehl sollte pytest 9.1.1 melden. Das interne Netzwerk erreicht ausschließlich den Paketspiegel von Python Land, niemals das öffentliche PyPI. .venv ist abgeleiteter Zustand und wird beim Speichern des Arbeitsbereichs ausgeschlossen. requirements.txt hält die dauerhafte Projektentscheidung fest, mit der sich eine andere Umgebung wieder aufbauen lässt.
Gib pytest einen Namen, den es findet
Erstelle das Testverzeichnis und öffne sein erstes Modul:
mkdir -p tests
nano tests/test_catalog.py
Schreibe einen Test:
from catalog import select_items
def test_equal_quantity_is_included():
item = {"sku": "EQ-4", "quantity": 4}
assert select_items([item], 4) == [item]
Pytest findet automatisch Dateien mit Namen wie test_*.py und Funktionen mit Namen wie test_*. Die Funktion braucht keine besondere Basisklasse. Ihre einfache Assertion ist dieselbe Prüfung für die Entwicklung, die du in Fundamentals I kennengelernt hast. Jetzt findet ein Test-Runner sie und meldet das Ergebnis.
Starte pytest aus genau dieser Umgebung:
.venv/bin/python -m pytest -q
Ein Punkt und 1 passed bedeuten, dass ein Test gefunden wurde und seine Assertion erfüllt war. Dass eine Assertion keine Meldung ausgibt, reicht allein nicht aus: Die pytest-Zusammenfassung belegt, dass die Funktion gefunden wurde.
Achte darauf, welche dieser beiden Sachen dauerhaft gespeichert wird. .venv ist abgeleiteter Zustand und wird nicht in die nächste Lektion übernommen; requirements.txt und tests/test_catalog.py schon. Es ist dieselbe Trennung wie in Kapitel 3, diesmal für den Test-Runner statt für die Anwendung.
Pytest meldet „no tests ran“, nachdem du die Datei versehentlich catalog_checks.py genannt hast. Welche Vorgabe prüfst du zuerst?
Als Nächstes unterscheidest du eine funktionierende Testerkennung von den verschiedenen Gründen, aus denen ein pytest-Befehl enden kann.
Aufgabe
Erstelle die genau vorgegebene dauerhafte requirements.txt und anschließend tests/test_catalog.py mit einem automatisch auffindbaren Test mit einfacher Assertion. Er soll belegen, dass ein Artikel mit genau der Mindestmenge enthalten ist. Führe ihn vor der Abgabe mit dem Python der festgelegten venv aus; die Bewertung prüft die Dateien und das Verhalten der gefundenen Tests, nicht den Terminalverlauf oder die ausgeschlossene Umgebung.