2.6 KiB
Task 18 — Testing
Rückblick Task 17: PostgresStorage
Falls alles geklappt hat, habt ihr nun eure POI's in einer lokalen PostGreSQL-Datenbank abgespeichert. Erreicht haben wir
diese in einer Implementation von PostgresStorage(Storage) ohne bestehende Businesslogik in main.py etc. anzufassen.
Das garantiert maximale Flexibilität und Wiederverwendbarkeit des Codes und ist deutlich wartungsfreundlicher und damit
auch übersichtlicher.
Aufgabe
Bisher haben wir keinen einzigen Test für unser Miniprojekt geschrieben. Wir werden das hier auch nicht im grossen Stil und vollumfänglich machen, sondern nur exemplarisch.
UND: Wir haben noch eine 'sicherheitsrelevante' Einschränkung im Code. Im jetzigen Stand werden persönliche/private
Informationen wie der username und vor allem das password im connection_string in config.yaml geschrieben. Das
ist nicht ideal, weil die config ins git geschrieben wird und somit für alle (berechtigten) einsehbar ist. Das wollen
und müssen wir ändern!
Konkret:
-
Speichert den privaten
connection_stringin einer neue angelegten.envund verwendet diesen in euerem Code unter Nutzung vonload_dotenvaus (aus dem dotenv-Modul). Schaut zudem, dass euer.envin.gitignoreaufgeführt ist und somit nicht von git 'getracked' wird! -
Erstellt einen neuen Ordner
testsin eurem root-Projektverzeichnis (also nebensrc) -
Erstellt darin ein neues Modul
tests_overpass.py -
Wie erwähnt wollen wir nur exemplarisch wenige Tests machen:
- in der POI-Klasse haben wir eine Klassenmethode
from_row: Schreibt einen ganz einfachen Unittest, welcher überprüft, ob diese tatsächlich einPOI-Objekt zurück gibt.
@classmethod def from_row(cls, row: dict) -> POI: """DB-Zeile → POI-Objekt (Lesen)""" return cls( id = row["id"], type = row["type"], poi_type = row["poi_type"], lat = row["lat"], lon = row["lon"], tags = row["tags"] or {}, )- im Unterricht wurden kurz Inhalte aus dem Testing mit
mocks,stubundfakeangesprochen. Lest das nochmals und versucht zu verstehen wie und wo man diese in unserem Projekt gebrauchen könnte und warum. Wir werden gemeinsam je ein Beispiel aus jeder dieser 3 Kategorien zusammen anschauen.
- in der POI-Klasse haben wir eine Klassenmethode
Fragen zum Nachdenken:
- Zum Projektabschluss: Bitte überlegt euch Stärken aber sicher auch Einschränkungen/Schwächen unseres Mini-Projekts. Was könnte man besser/einfacher/anders machen?