PHP_CodeSniffer (PHP)
phpcs-aaa 是一个 PHPCS 标准,在 PHP 测试方法中强制执行 Arrange-Act-Assert 模式。
安装
bash
composer require --dev babu-ch/phpcs-aaa若未使用 phpcodesniffer-composer-installer,请手动注册标准路径:
bash
vendor/bin/phpcs --config-set installed_paths vendor/babu-ch/phpcs-aaa启用 sniff
xml
<!-- phpcs.xml.dist -->
<?xml version="1.0"?>
<ruleset name="Project">
<file>tests</file>
<rule ref="AAA"/>
</ruleset>临时执行:
bash
vendor/bin/phpcs --standard=AAA tests/Sniff: AAA.Tests.Pattern
配置
xml
<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>按方法名前缀匹配测试方法 (PHPUnit 约定: 以 test 开头的方法)。若命名不同请扩展列表。
示例
Given / When / Then
xml
<property name="labels" type="array">
<element key="arrange" value="given"/>
<element key="act" value="when"/>
<element key="assert" value="then"/>
</property>检测示例
php
// 错误: 缺少 "arrange"
public function testBad(): void
{
// act
$x = $this->doThing();
// assert
$this->assertSame(1, $x);
}
// 错误: 顺序错误
public function testAlsoBad(): void
{
// act
$x = $this->doThing();
// arrange
$y = 1;
// assert
$this->assertSame($y, $x);
}自动修复
当三个段落注释全部缺失时,vendor/bin/phpcbf (PHP_CodeSniffer 自带的自动修复工具) 会在测试方法顶部插入 // arrange / // act / // assert 模板。然后只需将各注释移到对应代码的上方即可。
其他情况 (缺失一两个、顺序错误、空段) 不会自动修复 — 因为正确的插入位置取决于测试的意图,错误信息会明确告诉你「该添加什么」「该放在哪里」。