Sniper Testing
Effort: free — pure Disziplin, keine zusätzlichen Läufe; senkt die Netto-Kosten unterm Strich, weil sie Voll-Suite-Wiederholungen während der Iteration streicht. Beseitigt: Test-Blähung (Läufe der ganzen Suite für einen winzigen Diff) und die Mock-Theater-Grüns, auf denen du sonst bauen würdest.
Warum es das gibt
Zwei Fehler-Muster verbrennen die meiste Testzeit. Test-Blähung: die ganze
Suite für eine winzige Änderung fahren. Mock-Theater: Tests, die bestehen,
während die echte Fähigkeit physisch kaputt ist. Dieser Skill killt beides.
Regel 1 — der Diff definiert den Scope, nicht der Optimismus
Während der Fix/Build-Iterationsschleife ist es dir verboten, die ganze
Test-Suite zu fahren.
- Fahr
git diff --name-only HEAD, um exakt zu sehen, welche Dateien du
angefasst hast.
- Ordne jeder angefassten Datei die Test-Dateien zu, die sie direkt abdecken
(z. B.
src/payments/refund.py → tests/test_refund.py).
- Benenn dein konkretes Test-Ziel, dann fahr NUR diese Dateien
(Python:
pytest tests/test_refund.py;
JS: npx vitest run tests/refund.test.js;
Go: go test ./payments/ -run TestRefund).
- Ein Test, der schon bestanden hat, wird nicht neu gefahren, außer deine
nächste Änderung berührt Code, den er ausübt. Der Diff definiert den
Scope — nicht Optimismus, nicht Angst.
- Beim Landen — am Commit-Gate — fahr EINEN vollen Durchlauf über die Suite
jedes angefassten Moduls. Dieser eine Durchlauf fängt indirekte Kopplungen
genau einmal. Iterationstempo und eine solide Landung gehören beide zum Job.
Regel 2 — Mock-Theater killen
Ein Fähigkeits-Test muss einen echten, physischen Nebeneffekt asserten:
- „erzeugt ein Video“ → eine echte Datei liegt auf der Platte, Größe > 0 Bytes.
- „speichert Erinnerung“ → die Zeile lässt sich aus einer echten lokalen
Datenbank zurücklesen.
- „rendert das Widget“ → ein echtes DOM-Element existiert auf der Seite.
Mock nicht die Datenbank. Mock nicht das Dateisystem. Mock keine lokalen
Netzwerk-Sockets.
Der eine legale Mock ist das bezahlte externe Transport-Blatt — der HTTP-Call
an eine kostenpflichtige Dritt-API. Selbst dann muss der Test die ganze echte
Logik drumherum durchlaufen: Request bauen, Routing, Antwort parsen. Mock die
Leitung, nie das Hirn.
Auditieren, bevor du traust
Bevor du dich auf irgendeinen Test verlässt, lies ihn. Ist er Mock-Theater —
grün wegen Mocks, ohne physische Assertion — lösch den Mock und schreib den
Test neu, sodass er einen echten Nebeneffekt assertet. Ein Test, der nicht
fehlschlagen kann, ist schlimmer als kein Test: er beglaubigt eine Lüge, und
du wirst auf dieser Lüge bauen.
Harte Regeln (eine gebrochen, und der Skill ist gerissen)
- Kein Voll-Suite-Lauf während der Iteration.
- Keine Grün-Behauptung ohne Assertion eines echten Nebeneffekts.
- Kein Mock jenseits des bezahlten externen Transport-Blatts in einem
Fähigkeits-Test.
- Kein Landen ohne den einen vollen Durchlauf über die angefassten Module.
Passt gut zu
1---2name: sniper-testing-23description: Für jede Fix- oder Build-Schleife, und bevor du irgendeinem grünen Test traust. Fährt nur die Tests, die abdecken, was du angefasst hast, und killt Mock-Theater — Tests, die bestehen, während die Fähigkeit kaputt ist. Trigger words: sniper testing, scoped tests, test scope, mock theater, fake green, full suite, test bloat, gezielte Tests, Test-Scope, falsches Grün, ganze Suite, Test-Blähung.4license: MIT5---67# Sniper Testing8**Effort:** free — pure Disziplin, keine zusätzlichen Läufe; senkt die Netto-Kosten unterm Strich, weil sie Voll-Suite-Wiederholungen während der Iteration streicht. Beseitigt: Test-Blähung (Läufe der ganzen Suite für einen winzigen Diff) und die Mock-Theater-Grüns, auf denen du sonst bauen würdest.910## Warum es das gibt1112Zwei Fehler-Muster verbrennen die meiste Testzeit. Test-Blähung: die ganze13Suite für eine winzige Änderung fahren. Mock-Theater: Tests, die bestehen,14während die echte Fähigkeit physisch kaputt ist. Dieser Skill killt beides.1516## Regel 1 — der Diff definiert den Scope, nicht der Optimismus1718Während der Fix/Build-Iterationsschleife ist es dir verboten, die ganze19Test-Suite zu fahren.20211. Fahr `git diff --name-only HEAD`, um exakt zu sehen, welche Dateien du22 angefasst hast.232. Ordne jeder angefassten Datei die Test-Dateien zu, die sie direkt abdecken24 (z. B. `src/payments/refund.py` → `tests/test_refund.py`).253. Benenn dein konkretes Test-Ziel, dann fahr NUR diese Dateien26 (Python: `pytest tests/test_refund.py`;27 JS: `npx vitest run tests/refund.test.js`;28 Go: `go test ./payments/ -run TestRefund`).294. Ein Test, der schon bestanden hat, wird nicht neu gefahren, außer deine30 nächste Änderung berührt Code, den er ausübt. Der Diff definiert den31 Scope — nicht Optimismus, nicht Angst.325. Beim Landen — am Commit-Gate — fahr EINEN vollen Durchlauf über die Suite33 jedes angefassten Moduls. Dieser eine Durchlauf fängt indirekte Kopplungen34 genau einmal. Iterationstempo und eine solide Landung gehören beide zum Job.3536## Regel 2 — Mock-Theater killen3738Ein Fähigkeits-Test muss einen echten, physischen Nebeneffekt asserten:3940- „erzeugt ein Video“ → eine echte Datei liegt auf der Platte, Größe > 0 Bytes.41- „speichert Erinnerung“ → die Zeile lässt sich aus einer echten lokalen42 Datenbank zurücklesen.43- „rendert das Widget“ → ein echtes DOM-Element existiert auf der Seite.4445Mock nicht die Datenbank. Mock nicht das Dateisystem. Mock keine lokalen46Netzwerk-Sockets.4748Der eine legale Mock ist das bezahlte externe Transport-Blatt — der HTTP-Call49an eine kostenpflichtige Dritt-API. Selbst dann muss der Test die ganze echte50Logik drumherum durchlaufen: Request bauen, Routing, Antwort parsen. Mock die51Leitung, nie das Hirn.5253## Auditieren, bevor du traust5455Bevor du dich auf irgendeinen Test verlässt, lies ihn. Ist er Mock-Theater —56grün wegen Mocks, ohne physische Assertion — lösch den Mock und schreib den57Test neu, sodass er einen echten Nebeneffekt assertet. Ein Test, der nicht58fehlschlagen kann, ist schlimmer als kein Test: er beglaubigt eine Lüge, und59du wirst auf dieser Lüge bauen.6061## Harte Regeln (eine gebrochen, und der Skill ist gerissen)6263- Kein Voll-Suite-Lauf während der Iteration.64- Keine Grün-Behauptung ohne Assertion eines echten Nebeneffekts.65- Kein Mock jenseits des bezahlten externen Transport-Blatts in einem66 Fähigkeits-Test.67- Kein Landen ohne den einen vollen Durchlauf über die angefassten Module.6869## Passt gut zu7071- [clean-code-gauntlet](../clean-code-gauntlet/SKILL.md) — der Sniper-Scope füttert sein erstes Gate72- [red-first](../red-first/SKILL.md) — schreib den fehlschlagenden Test vor dem Fix73- [seam-engineering](../seam-engineering/SKILL.md) — fix die Klasse, dann feg mit gescopten Tests