Ein echtes Projekt testen · Übung
Das Ergebnis lesen und einen Ablauf testen
Der erste Punkt war nützlich, weil pytest eine Funktion gefunden hatte. Eine Zusammenfassung kann dir auch sagen, warum es noch keinen verlässlichen Beleg für einen bestandenen Test gibt.
Die Laufzeitumgebung der Website enthält bereits die im Kurs festgelegte pytest-Version. Ab dieser Lektion verwendet python -m pytest diese Laufzeitumgebung. Der Verlust der vorübergehenden .venv blockiert die Übungen auf der Website also nicht. Verwende auf deinem eigenen Rechner weiterhin das Python deiner Projektumgebung mit -m pytest.
Führe die Testsuite aus und frage anschließend Bash nach dem Prozessstatus:
python -m pytest -q
echo $?
Lies das Ergebnis, bevor du den Anwendungscode bearbeitest:
| Status | Bedeutung hier |
|---|---|
0 | Tests wurden gefunden und alle bestanden |
1 | Tests wurden gefunden und mindestens einer schlug fehl |
2 | Die Testerkennung wurde unterbrochen, häufig durch einen Import- oder Syntaxfehler |
5 | pytest hat keine Tests gefunden |
Status 2 bedeutet keine verletzte Verhaltenserwartung. Behebe zuerst das Problem bei der Testerkennung oder beim Import. Status 5 ist ebenfalls kein Erfolg: Kein Test hat das Verhalten der Anwendung beobachtet.
Lass einen Test einen Ablauf erzählen
Öffne das Testmodul und erweitere das Gleichheitsbeispiel:
nano tests/test_catalog.py
Lass drei Schritte deutlich erkennen:
def test_equal_quantity_is_included():
# Arrange
item = {"sku": "EQ-4", "quantity": 4}
items = [item]
# Act
selected = select_items(items, 4)
# Assert
assert selected == [item]
Arrange bereitet die Eingabe und die Grenze der Erwartung vor. Act führt ein öffentliches Verhalten aus. Assert vergleicht das beobachtbare Ergebnis. Die Kommentare sind vorübergehende Wegweiser, keine besondere Syntax. Die Trennung verhindert, dass bei einem späteren Fehler drei mögliche Ursachen in einer Zeile vermischt sind.
Führe pytest erneut aus. Wenn es einen fehlgeschlagenen Test meldet, beginne bei den erwarteten und tatsächlichen Werten der Assertion. Sieh dir anschließend den innersten relevanten Aufrufrahmen aus deinem Projekt an. „Repariere“ die Testerkennung nicht, indem du die Funktion so umbenennst, dass sie verschwindet.
Was belegt pytest-Status 5?
Der Gleichheitsfall ist grün. Dieselbe inklusive Regel hat benachbarte Fälle. Als Nächstes drückst du sie aus, ohne die ganze Funktion dreimal zu kopieren.
Wenn pytest etwas meldet, das du nicht einordnen kannst, füge die ganze Zusammenfassung bei Monty ein und frage nach der Bedeutung des Statuscodes, bevor du Code änderst. Die falsche Ebene zu reparieren kostet mehr Zeit, als die Meldung zu lesen.
Aufgabe
Behalte in tests/test_catalog.py einen auffindbaren Test für den Gleichheitsgrenzfall. Bereite seinen Artikel und die Liste vor, führe genau einen Aufruf von select_items aus und prüfe die zurückgegebene Liste mit einer Assertion. Führe pytest aus und behebe Probleme bei der Testerkennung oder Ergebnisse ohne Tests, bevor du ein Assertion-Ergebnis als Beleg wertest.