用途:在 Symfony 项目中用 PHPUnit 10/11 的基于类测试驱动功能开发,遵循 RED-GREEN-REFACTOR 循环。适用于为新行为选择 TestCase、KernelTestCase 或 WebTestCase,测试控制台命令,测试必须返回 422 的无效表单,以及通过测试容器替换外部服务。
主要能力:RED 阶段选择基类,用 #[Test]、#[DataProvider]、#[CoversClass] 编写测试并确认其因正确原因失败;GREEN 阶段写最少代码使其通过;REFACTOR 阶段在测试全绿下重构并每次改动后重跑。可用 static::getContainer()->set(Service::class, $mock) 替换外部边界;用 CommandTester 测试命令,或在 Symfony 8.1+ 用 runCommand() 与 assertCommandIsSuccessful();用 assertResponseIsUnprocessable() 断言无效表单提交。
使用方式:按默认工作流执行,先写失败测试再实现,最后重构;需要深入实现细节时打开 reference.md。输出契约包括失败的 PHPUnit 输出(RED)、通过的运行结果、改动的测试文件及其基类与属性、执行的命令。
限制与注意:使用 PHPUnit 10+ 属性而非 @test 或 @dataProvider 注解;用 static::getContainer() 获取服务,而非旧版 self::$container;只 mock 真正的外部边界(HTTP 客户端、第三方 SDK),其余保留真实服务与真实数据库;runCommand() 与 getContainer()->set() 中的闭包需要 Symfony 8.1+。