Automatisches Testen in PHP
Inhaltsverzeichnis
- Linting
- Statische Analyse
- Unit Tests
Linting
Was ist Linting?
- Linting ist die Untersuchung des Codes auf mögliche Fehler
- Linting wird vor Commits durchgeführt
- Linting wird auf der Maschine des Entwicklers und dem CI-Server durchgeführt
Linting
Ziele
- Sicherstellen, dass die Syntax korrekt ist
- Sicherstellen, dass die Formatierung dem Standard entspricht
- Den manuellen Aufwand bei Code-Reviews reduzieren
Linting
Werkzeuge
- PHP Code Sniffer
- PHP Parallel Lint
Linting
Konfiguration (gitlab)
# .gitlab-ci.yml
php-lint:
stage: test
image: php:8.1-cli
script:
- vendor/bin/parallel-lint --exclude vendor/ .
psr-12-lint:
stage: test
image: php:8.1-cli
script:
- vendor/bin/phpcs --standard=PSR12 --extensions=php --ignore=vendor/ .
Statische Analyse
Was ist Statische Analyse?
- Statische Analyse analysiert den Code ohne ihn auszuführen
- Statische Analyse wird normalerweise ausgeführt bevor der Code committed wird
- Statische Analyse wird normalerweise auf der Entwicklungsmaschiene und dem CI-Server durchgeführt
Statische Analyse
Ziele
- Potentielle Bugs finden
- Potentielle Performanceprobleme finden
- Potentielle Sicherheitsprobleme finden
Statische Analyse
Werkzeuge
- Psalm
- PHPStan
- Phan
Statische Analyse
Konfiguration (gitlab)
# .gitlab-ci.yml
static-analysis-psalm:
stage: test
image: php:8.1-cli
script:
- vendor/bin/psalm --show-info=false
static-analysis-phpstan:
stage: test
image: php:8.1-cli
script:
- vendor/bin/phpstan analyse --no-progress
static-analysis-phan:
stage: test
image: php:8.1-cli
script:
- vendor/bin/phan
Unit Tests
Was sind Unittests?
- Unit Tests testen eine kleine Codeeinheit in Isolation
- Unit Tests werden üblicherweise ausgeführt bevor Code comittet wird
- Unit Tests werden üblicherweise auf der Entwicklermaschiene und dem CI-Server ausgeführt
Unit Tests
Ziele
- schnelles Feedback für Entwickler
- sicherstellen, dass Code nur das tut, was er soll
- sicherstellen, dass keine Regressionen vorkommen
- sicherstellen, dass der Code leicht zu ändern ist
- sicherstellen, dass Fehler frühzeitig gefunden werden
Unit Tests
Werkzeuge
- PHPUnit
- infection
Unit Tests
Konfiguration (gitlab)
# .gitlab-ci.yml
unit-test:
stage: test
image: php:8.1-cli
script:
- vendor/bin/phpunit --coverage-text
mutation-test:
stage: test
image: php:8.1-cli
script:
- vendor/bin/infection --min-msi=60 --min-covered-msi=60