0%

Bewijs het gedrag van de database · eindproject

Eindproject: Project: een testsuite voor databasegedrag

Zeven gerichte tests beschermen zeven interfaces. Rond af met één onafhankelijk traject dat initialisatie, herhaalde import, beschikbaarheid, uitleen en blijvende opslag na heropenen verbindt, zonder toestand van een andere test over te nemen.

Maak test_import_retry_and_lending_flow(tmp_path) in tests/test_catalog.py af. Die krijgt een eigen complete-flow.db en CSV-pad. Schrijf minstens twee geldige, nog niet gebruikte voorwerprijen, inclusief tekst die onzorgvuldige aannames aan het licht brengt, zoals Unicode of een naam met een SQL-trefwoord. Roep catalog_import.import_items_csv(database_path, csv_path) twee keer aan. Vereis (N, 0) van de eerste aanroep en (0, N) van de exacte herhaling.

Open de database en leg alle vijf de voorwerpvelden op volgorde van ID vast voordat je verdergaat. Roep catalog_db.list_available_items(connection) aan en vergelijk de inventariscodes in de volgorde die de publieke functie belooft. Voeg één lid in en commit dat. Roep daarna catalog_db.checkout_item aan voor een van de geïmporteerde voorwerpen. Sluit de verbinding.

Open hetzelfde pad opnieuw. Vereis dat het uitgeleende voorwerp uit het beschikbaarheidsresultaat is verdwenen, dat de uitlening elk verwacht veld bevat en dat de voorwerprijen nog steeds gelijk zijn aan de waarden die direct na de herhaalde import zijn vastgelegd. Deze volgorde is van belang: je bewijst eerst dat de herhaalde import de catalogus niet veranderde en gebruikt die catalogus daarna in het bredere traject.

Houd deze achtste test onafhankelijk. Die moet tmp_path aannemen, eigen bestanden aanmaken en geen aannames doen over welke van de andere zeven tests eerst draaide. Inspecteer geen programmabroncode, vergelijk geen SQL-strings en roep geen private functies aan. De suite is waardevol doordat ze publieke resultaten en blijvend opgeslagen toestand beschrijft terwijl de interne opbouw van het programma mag veranderen.

Druk op Run. run_tests.py roept precies pytest.main(["-q", "-p", "no:cacheprovider", "tests/test_catalog.py"]) aan. Het voltooide project moet dit melden:

Database tests passed: 8

Submit voert eerst de volledige correcte suite twee keer uit. Daarna controleert het elke eerdere gedragsverandering en twee regressies bij exacte herhaling, elk in een nieuw project. Elke uitvoering moet de tests normaal vinden en mislukken op een echte assertion, niet door een toevallige importfout. Gegenereerde databases, CSV-bestanden en caches moeten buiten de projectmap blijven. Je hebt nu acht compacte tests die je opnieuw kunt uitvoeren na een wijziging in een query, transactie, migratie of import.

Opdracht

Maak test_import_retry_and_lending_flow(tmp_path) in tests/test_catalog.py af. Importeer één geldige, nog niet gebruikte CSV twee keer, vereis (N, 0) en daarna (0, N), open opnieuw en leg de ongewijzigde voorwerpen vast. Ga verder via de publieke beschikbaarheids- en uitleenfuncties en open daarna nogmaals om het beschikbaarheidsresultaat, de blijvend opgeslagen uitlening en de voorwerprijen te bewijzen. Houd alle acht de tests onafhankelijk en laat de programmamodules ongewijzigd.