Ein echtes Projekt testen · Abschlussprojekt
Abschlussprojekt: Projekt: Belege die Wirksamkeit der Tests
Eine grüne Testsuite belegt, dass die aktuellen Beispiele mit dem aktuellen Anwendungscode übereinstimmen. Sie belegt noch nicht, dass die Beispiele eine realistische Regression bemerken würden. Dieses Projekt prüft beide Richtungen.
Führe die dauerhaft gespeicherte Testsuite noch einmal aus:
python -m pytest -q
cat requirements.txt
Das gespeicherte Projekt sollte dein Programm, seine Eingabe- und Schemadokumentation, die eine festgelegte Abhängigkeit und die Tests enthalten. Es sollte weder selected.json noch catalog.json noch vorübergehende CSV- oder JSON-Dateien enthalten. Pytest kann ausgeschlossenen Werkzeugzustand wie .pytest_cache erzeugen; das ist abgeleiteter Zustand, keine selbst verfasste Projektdatei.
Baue absichtlich Fehler in dein Programm ein
Diese Übung entscheidet darüber, ob es sich lohnt, deine Testsuite zu behalten.
Erstelle eine vorübergehende Sicherung von catalog.py außerhalb des Projekts, zum Beispiel unter /tmp/catalog.py.lesson10-backup. Gehe dann zum Original zurück und baue einen Fehler ein. Einen echten, wie ihn jemand macht, der müde ist. Führe die Suite aus. Wird ein Test rot? Zeigt die Fehlermeldung auf das, was du beschädigt hast?
Gehe diese Fehler einzeln durch und stelle dazwischen jeweils die bekanntermaßen korrekte Datei wieder her. Stelle zum Schluss die richtige Version wieder her und führe die vollständige Suite erfolgreich aus:
ändere das inklusive
>=zurück zu einem strikten>;ignoriere den Grenzwert vollständig und behalte alle Artikel;
sortiere die ausgewählten Artikel oder entferne Duplikate;
schreibe in einen festen Dateinamen statt in den angeforderten Ausgabepfad;
setze erneut
ensure_ascii=True;entferne den abschließenden Zeilenumbruch aus der geschriebenen Datei;
lass das Programm nach einem Lesefehler weiterlaufen und trotzdem eine Ausgabe schreiben.
Sieben Fehler. Eine Suite, die bei einem davon grün bleibt, hat eine Lücke. Jetzt weißt du genau, wo sie liegt.
Dabei kannst du dich auf zwei Arten täuschen lassen. Eine Suite, die immer rot ist, entdeckt nichts; sie ist einfach kaputt. Und ein Test, der fehlschlägt, weil pytest ihn nicht finden oder dein Modul nicht importieren konnte, hat dir nichts über den eingebauten Fehler gesagt. Prüfe, dass der Ausgangszustand grün ist und die Anzahl der gefundenen Tests unverändert bleibt, bevor du einem roten Ergebnis vertraust.
Schreibe die Assertion selbst
Für Tests des Dateiverhaltens gilt noch eine Regel, die wichtiger ist, als sie zunächst aussieht.
Wenn du prüfst, was der Schreiber erzeugt hat, parse die Datei mit json.loads und vergleiche sie mit einem Dictionary, das du selbst im Test geschrieben hast. Rufe nicht dein eigenes read_catalog_json auf, um dein eigenes write_catalog_json zu prüfen. Wenn beide denselben Fehler haben, werden sie perfekt übereinstimmen und dir sagen, dass alles in Ordnung ist.
Ein Test sollte eine unabhängige Einschätzung liefern, keine zweite Stimme aus derselben Quelle.
Drücke Check my work, wenn das korrekte Projekt grün ist und jede Datei, die deine Tests berühren, unter tmp_path liegt.
Aufgabe
Vervollständige die dauerhafte Testsuite in tests/test_catalog.py: aussagekräftige Parameterfälle für den inklusiven Grenzwert, eine separate Prüfung für Reihenfolge und Duplikate, isolierte Prüfungen der Unicode- und Formatausgabe sowie den Erhalt des Kontrollinhalts bei Lesefehlern. Behalte pytest==9.1.1 als feste Version in requirements.txt, halte den Anwendungscode grün und das Projekt frei von erzeugten Katalogdateien. Die Bewertung prüft deine Tests an korrekten und gezielt veränderten Kopien außerhalb deines Arbeitsbereichs.