PHP_CodeSniffer (PHP)
phpcs-aaa ist ein PHPCS-Standard, der das Arrange-Act-Assert-Muster in PHP-Testmethoden erzwingt.
Installation
composer require --dev babu-ch/phpcs-aaaWenn du phpcodesniffer-composer-installer nicht verwendest, registriere den Standardpfad manuell:
vendor/bin/phpcs --config-set installed_paths vendor/babu-ch/phpcs-aaaSniff aktivieren
<!-- phpcs.xml.dist -->
<?xml version="1.0"?>
<ruleset name="Project">
<file>tests</file>
<rule ref="AAA"/>
</ruleset>Ad-hoc-Ausführung:
vendor/bin/phpcs --standard=AAA tests/Sniff: AAA.Tests.Pattern
Konfiguration
<rule ref="AAA.Tests.Pattern">
<properties>
<property name="caseSensitive" value="false"/>
<property name="allowEmptySection" value="true"/>
<property name="testFunctionPrefixes" type="array">
<element value="test"/>
</property>
<property name="labels" type="array">
<element key="arrange" value="arrange"/>
<element key="act" value="act"/>
<element key="assert" value="assert"/>
</property>
</properties>
</rule>Testmethoden werden über den Namenspräfix erkannt (PHPUnit-Konvention: Methoden, die mit test beginnen). Erweitere die Liste bei abweichender Benennung.
Beispiele
Given / When / Then
<property name="labels" type="array">
<element key="arrange" value="given"/>
<element key="act" value="when"/>
<element key="assert" value="then"/>
</property>Was erkannt wird
// Fehler: "arrange" fehlt
public function testBad(): void
{
// act
$x = $this->doThing();
// assert
$this->assertSame(1, $x);
}
// Fehler: falsche Reihenfolge
public function testAlsoBad(): void
{
// act
$x = $this->doThing();
// arrange
$y = 1;
// assert
$this->assertSame($y, $x);
}Auto-Fix
Wenn alle drei Sektions-Kommentare fehlen, fügt vendor/bin/phpcbf (der mit PHP_CodeSniffer mitgelieferte Auto-Fixer) eine // arrange / // act / // assert-Vorlage am Anfang der Testmethode ein. Verschiebe danach jeden Kommentar über den Code, zu dem er gehört.
Andere Fälle (einer oder zwei fehlend, falsche Reihenfolge, leere Sektion) werden nicht automatisch korrigiert — die richtige Einfügeposition hängt von der Absicht des Tests ab, und die Fehlermeldung sagt dir genau, „was" und „wo" einzufügen ist.