Code-Coverage & Mutation-Testing — Treiber-Setup
Wie du einen Coverage-Treiber aktivierst, damit
just test-coverage,just test-mutateundjust allechte Coverage/Mutation laufen lassen statt sie zu überspringen. Mit Fokus auf Laravel Herd (Mac).
Wann braucht man einen Coverage-Treiber?
Ein Coverage-Treiber (Xdebug oder PCOV — eines reicht) ist nötig für:
php artisan test --coverage→ Coverage-Report.- Mutation-Testing (
composer mutate/just test-mutate) → Pflicht: Mutation misst, welche Code-Zeilen ein Test abdeckt, um nur abgedeckten Code zu mutieren.
Ohne Treiber bricht composer mutate mit Mutation testing requires code coverage to be enabled ab.
Verhalten der just-Rezepte (kein Treiber = kein Crash)
just test-coverage und just test-mutate — und damit auch just all — erkennen
automatisch, ob Xdebug oder PCOV aktiv ist:
- Kein Treiber aktiv: Der Schritt wird sauber übersprungen (mit Warnung),
just allläuft weiter (Tests/Browser kommen trotzdem dran). - Treiber aktiv: Die Rezepte setzen automatisch
XDEBUG_MODE=coverage.
→ Du musst also nur einen Treiber aktivieren, den Rest erledigen die Rezepte.
Laravel Herd (Mac) — empfohlen: Xdebug
Wichtig: Herd bringt eine eigene, statisch gebaute PHP mit — nicht die von Homebrew. Deshalb:
brew install …/pecl install pcovgreift nicht in Herds PHP. PCOV ist auf Herd der unbequeme Weg (siehe unten).- Herd liefert Xdebug bereits mit → das ist hier der richtige Coverage-Treiber.
Schritte
- Xdebug in Herd aktivieren — in der Herd-App bei der aktiven PHP-Version den Xdebug-Schalter einschalten (Herd hat dafür einen eingebauten Toggle; in Herd Pro prominent unter den PHP-Einstellungen).
- Prüfen (CLI, denn
php artisan testnutzt die CLI-PHP):php -m | grep -i xdebug # muss "xdebug" zeigen
php -v # zeigt "with Xdebug ..." - Coverage-Modus — machen die
just-Rezepte automatisch (XDEBUG_MODE=coverage). Manuell wäre es:XDEBUG_MODE=coverage php artisan test --coverage
XDEBUG_MODE=coverage composer mutateXdebug 3 startet standardmäßig nicht im Coverage-Modus — deshalb ist
XDEBUG_MODE=coveragenötig. Genau das setzen die Rezepte für dich. - Danach laufen
just test-coverage,just test-mutateundjust allmit echter Coverage.
⚠️ Mutation-Testing mit Xdebug ist langsam (Xdebug ist als Debugger schwergewichtig).
composer mutatenutzt--covered-only, trotzdem mit deutlicher Laufzeit rechnen. Die normale Suite (just test) bleibt die Hauptabsicherung; Mutation ist die Kür.
Alternative: PCOV über separate Homebrew-PHP (nur wenn wirklich gewünscht)
PCOV ist schneller als Xdebug, lässt sich aber nicht in Herds statische PHP einklinken. Nur sinnvoll, wenn du die Tests bewusst unter einer eigenständigen Homebrew-PHP (statt Herds PHP) laufen lässt — ein Parallel-Setup:
brew install php # eigenständige Homebrew-PHP, neben Herd
pecl install pcov # installiert PCOV in die Homebrew-PHP
which php # MUSS auf die Homebrew-PHP zeigen, nicht auf Herd
php -m | grep pcov
Für die meisten Herd-Nutzer unnötig — bleib bei Xdebug.
Linux / CI (Referenz)
Dort ist PCOV (schnell, coverage-only) die beste Wahl:
# Debian/Ubuntu (PHP-Version anpassen):
sudo apt install php8.4-pcov
# oder generisch via PECL:
pecl install pcov && echo "extension=pcov.so" | sudo tee /etc/php/8.4/cli/conf.d/20-pcov.ini
# prüfen:
php -m | grep pcov # muss "pcov" zeigen
Schnell-Check
php -m | grep -iE 'xdebug|pcov' # zeigt es einen Treiber? Dann läuft Coverage/Mutation.
just test-coverage # mit Treiber: echte Coverage; ohne: normale Suite
just test-mutate # mit Treiber: Mutation; ohne: sauber übersprungen