0%

Das Datenbankverhalten belegen · Abschlussprojekt

Abschlussprojekt: Projekt: Eine Testsuite für Datenbankverhalten

Sieben gezielte Tests schützen sieben Grenzen. Schließe mit einem unabhängigen Ablauf ab, der Initialisierung, Importwiederholung, Verfügbarkeit, Ausleihe und dauerhafte Speicherung nach erneutem Öffnen verbindet, ohne Zustand aus einem anderen Test zu übernehmen.

Vervollständige test_import_retry_and_lending_flow(tmp_path) in tests/test_catalog.py. Es erhält seine eigene complete-flow.db und einen CSV-Pfad. Schreibe mindestens zwei gültige unbekannte Gegenstandszeilen, einschließlich Text, der unvorsichtige Annahmen aufdecken würde, etwa Unicode oder einen Namen mit einem SQL-Schlüsselwort. Rufe catalog_import.import_items_csv(database_path, csv_path) zweimal auf. Verlange (N, 0) beim ersten Aufruf und (0, N) bei der exakten Wiederholung.

Öffne die Datenbank und halte vor dem Fortfahren alle fünf Gegenstandsfelder in ID-Reihenfolge fest. Rufe catalog_db.list_available_items(connection) auf und vergleiche seine Inventarkennzeichen in der öffentlichen Reihenfolge. Füge ein Mitglied ein und schreibe es fest, rufe dann catalog_db.checkout_item für einen importierten Gegenstand auf. Schließe die Verbindung.

Öffne denselben Pfad erneut. Verlange, dass der ausgeliehene Gegenstand aus dem Verfügbarkeitsergebnis verschwunden ist, der Ausleihvorgang jedes erwartete Feld enthält und die Gegenstandszeilen weiterhin den unmittelbar nach der Wiederholung festgehaltenen Werten entsprechen. Diese Reihenfolge ist wichtig: Du belegst zuerst, dass der wiederholte Import den Katalog nicht geändert hat, und verwendest diesen Katalog dann im größeren Ablauf.

Halte diesen achten Test unabhängig. Er muss tmp_path annehmen, eigene Dateien erstellen und darf keine Annahme darüber machen, welcher der anderen sieben Tests zuerst lief. Untersuche keinen Programmquellcode, vergleiche keine SQL-Strings und rufe keine privaten Funktionen auf. Die Testsuite ist wertvoll, weil sie öffentliche Ergebnisse und dauerhaften Zustand beschreibt und zugleich erlaubt, dass die interne Organisation des Programms sich weiterentwickelt.

Klicke auf Run. run_tests.py ruft genau pytest.main(["-q", "-p", "no:cacheprovider", "tests/test_catalog.py"]) auf. Das fertige Projekt sollte Folgendes melden:

Database tests passed: 8

Submit führt zuerst die vollständige korrekte Testsuite zweimal aus. Danach prüft es jede frühere Verhaltensänderung und zwei Regressionen bei exakter Wiederholung, jeweils in einem neuen Projekt. Jeder Durchlauf muss normal Tests erkennen und an einer echten Zusicherung scheitern, nicht an einem zufälligen Importfehler. Erzeugte Datenbanken, CSV-Dateien und Caches müssen außerhalb des Projektbaums bleiben. Du hast jetzt acht kompakte Tests, die nach einer Änderung an Abfrage, Transaktion, Migration oder Import erneut ausgeführt werden können.

Aufgabe

Vervollständige test_import_retry_and_lending_flow(tmp_path) in tests/test_catalog.py. Importiere eine unbekannte gültige CSV-Datei zweimal, verlange zuerst (N, 0) und dann (0, N), öffne erneut und halte die unveränderten Gegenstände fest. Fahre über die öffentlichen Verfügbarkeits- und Ausleihfunktionen fort und öffne dann erneut, um Verfügbarkeitsergebnis, dauerhaft gespeicherten Ausleihvorgang und Gegenstandszeilen zu belegen. Halte alle acht Tests unabhängig und lass die Programmmodule unverändert.