Unit-Tests¶
Unit-Tests prüfen eine einzelne Funktion oder Klasse in Isolation — ohne Datenbank, Netzwerk oder Browser. Sie sind die Basis der Testpyramide: am zahlreichsten, am schnellsten, am präzisesten in der Fehlermeldung.
Was diese Stufe prüft¶
- Backend-Fachlogik: reine Berechnungen und Engine-Regeln (VPD nach Tetens, GDD-Akkumulation, EC-Budget), Adapter-Logik (GBIF-/Perenual-Anreicherung).
- Frontend-Logik ohne DOM: Redux-Slices (Reducer, Actions) und Custom Hooks, die als reine Funktionen testbar sind.
Getestete Bereiche im Überblick¶
| Bereich | Getestete Elemente | Umfang |
|---|---|---|
| Domain-Logik (Backend) | VPD-/GDD-/EC-Berechnung, Phasen-Engine, Karenz-Gate, Companion/Fruchtfolge | umfangreich |
| Repositories (Backend) | ArangoDB-Zugriffe, Graph-Queries | umfangreich |
| Migrationen | Schema-Migrations-Framework | umfangreich |
| Celery-Tasks | Hintergrund-Jobs, Retention/Anonymisierung | mittel |
| Adapter | Wetter (DWD/Open-Meteo/OWM/NASA), GBIF, Perenual, PlantNet, Home Assistant, Notifications | mittel |
| Frontend | Redux-Slices, Custom Hooks | mittel |
Werkzeug & Ort¶
| Backend | Frontend | |
|---|---|---|
| Werkzeug | pytest (asyncio_mode = "auto") | vitest |
| Ort | src/backend/tests/unit/ | src/frontend/src/test/store/, …/hooks/ |
| Abhängigkeiten | keine externen | keine (kein Provider-Wrapper nötig) |
Ausführen¶
Die vollständigen Voraussetzungen und Muster stehen im Testkonzept → Backend-Tests bzw. → Frontend-Tests.
Konventionen¶
- Engine-Tests instanziieren die Klasse direkt und mocken keine Repositories.
- Service-Tests mocken das Repository (
AsyncMock(spec=…)). - Redux-Slice-Tests laufen ganz ohne React — Reducer als reine Funktion aufrufen.
- Jedes neue Feature braucht mindestens einen Unit-Test für seine Business-Logik.