pytest-Suite: 13 Tests in ~1 s, mutations-geprueft

Im Projekt sind ueber Monate dutzende Szenario-Tests entstanden ("mit 10
Szenarien getestet", "mit 18 synthetischen Szenarien") — alle als
Wegwerf-Skripte, keiner lief je ein zweites Mal. Bei einem System, das man vor
jeder Aenderung neu starten und live verifizieren muss, ist das der teuerste
Teil der Schleife.

Erfasst sind die beiden juengsten Pfade:
  · _check_pending_fill (6 Faelle) — u.a. "fremde Position NICHT taggen" und
    "derselbe Fill zaehlt nur einmal"
  · Selbst-Kalibrierung (7 Faelle) — Episoden-Dedup, WARTEN re-armt, Auswertung
    in beide Richtungen inkl. Broker-Offset, fehlende Bar bleibt offen,
    Aggregation

Drei harte Regeln in tests/conftest.py: keine Live-DB (frische Temp-Datei je
Test), kein MT5 / kein laufender Server (gestubbt), kein Netz. Das Schema legen
die ECHTEN Konstruktoren an — HistoryLogger UND CandleLogger, denn candles_m1
gehoert nicht zum History-Schema. Ein handgebautes Test-Schema wuerde
irgendwann vom Produktivstand abweichen.

Warum Temp-DB statt Kopie der Live-DB: am 06.08. haben echte candles_m1-Zeilen
in einem vermeintlich leeren Fenster einen Test verfaelscht — zweimal sah es
nach einem Code-Fehler aus, es waren Testfehler.

MUTATIONS-GEPRUEFT, weil eine Suite die immer gruen ist wertlos waere: eine
absichtlich eingebaute "fremde Position wird doch getaggt"-Regression wird
gefangen. Nebenbefund: der Fill-Dedup ist DOPPELT gesichert (_pending_tagged
und der pop aus _pending_tickets) — nur eines zu entfernen faellt nicht auf,
beides zusammen bricht sofort zwei Tests. Gewollte Redundanz, kein
ungetesteter Zweig.

tests_rec_outcomes.py (Wegwerf-Fassung von gestern) und die verwaiste
test_pbreak.db entfernt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-07 06:15:07 +02:00
co-authored by Claude Opus 5
parent 79f3e8efe1
commit 9887e3d5da
6 changed files with 332 additions and 163 deletions
+27
View File
@@ -259,6 +259,33 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
Anteil, WR-Verfall, PF<1, Einzelverlust). **Wöchentlich** laufen lassen (B4/B5).
- **Vor „fertig":** immer `python -m py_compile <datei>`; JS grob via Klammern-
Balance prüfen (kein node im Env).
- **⚠⚠ TEST-SUITE (`pytest`, `tests/`, seit 2026-08-07) — 13 Tests, ~1 s.**
Im Projekt sind über Monate **dutzende Szenario-Tests** entstanden („mit 10
Szenarien getestet", „mit 18 synthetischen Szenarien"), alle als
Wegwerf-Skripte. **Keiner davon lief je ein zweites Mal.** Bei einem System, das
man vor jeder Änderung neu starten und live verifizieren muss, ist das der
teuerste Teil der Schleife.
Aufruf: **`python -m pytest`** (Konfiguration in `pytest.ini`).
Erfasst sind zunächst die beiden jüngsten Pfade: **`_check_pending_fill`**
(6 Fälle, u. a. „fremde Position NICHT taggen" und „derselbe Fill zählt nur
einmal") und die **Selbst-Kalibrierung** (7 Fälle: Episoden-Dedup, WARTEN
re-armt, Auswertung in beide Richtungen inkl. Broker-Offset, fehlende Bar bleibt
offen, Aggregation).
**Drei harte Regeln in `tests/conftest.py`**, damit die Suite jederzeit
gefahrlos läuft: **keine Live-DB** (jeder Test bekommt eine frische Temp-Datei),
**kein MT5, kein laufender Server** (alles Broker-Nahe gestubbt), **kein Netz**.
⚠ Das Schema wird über die **echten** Konstruktoren angelegt — `HistoryLogger`
UND `CandleLogger` (`candles_m1` gehört nicht zum History-Schema). Ein von Hand
nachgebautes Test-Schema würde irgendwann vom Produktivstand abweichen.
**Warum die Temp-DB und nicht eine Kopie der Live-DB:** am 06.08. haben ECHTE
`candles_m1`-Zeilen in einem vermeintlich leeren Fenster einen Test verfälscht —
zweimal hintereinander sah es nach einem Code-Fehler aus, es waren Testfehler.
**Mutations-geprüft** (eine Suite, die immer grün ist, ist wertlos): eine
absichtlich eingebaute „fremde Position wird doch getaggt"-Regression wird
gefangen. ⚠ Nebenbefund dabei: der Fill-Dedup ist **doppelt** gesichert
(`_pending_tagged` UND der `pop` aus `_pending_tickets`) — nur eines von beiden
zu entfernen fällt nicht auf, beides zusammen bricht sofort zwei Tests. Das ist
gewollte Redundanz, kein ungetesteter Zweig.
- **⚠⚠ KONFIDENZINTERVALLE statt Bauchgefühl (`backtest_cost_gate.ci95`, seit
2026-08-07).** Das Projekt entschied bis dahin über **Punktschätzungen** plus die
2-Stichproben-Regel; ob ein ØR von +0,12 bei n=30 überhaupt von null zu