mcpField
T
tdd-with-phpunit

tdd-with-phpunit

github.com/dev-toolings测试与质量227102 次安装3 周前更新
代码仓库

关于 tdd-with-phpunit

tdd-with-phpunit 是面向使用 PHPUnit 10 或 11 的 Symfony 开发者的测试技能。它指导围绕应用行为、命令、表单和外部服务边界进行 RED-GREEN-REFACTOR,并明确输出要求和版本限制。

主要功能

  1. 01RED-GREEN-REFACTOR 工作流
  2. 02选择 Symfony 测试基类
  3. 03测试命令和无效表单
  4. 04用替身替换外部服务
  5. 05PHPUnit 属性与版本指导

适用场景

  1. 01以测试优先开发 Symfony 功能
  2. 02为新行为选择测试类
  3. 03测试控制台命令和 422 表单
  4. 04通过测试容器模拟外部服务

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dev-toolings/superpowers-symfony --skill tdd-with-phpunit

安装后在 Claude Code 中输入/tdd-with-phpunit确认已加载。

附带文件reference.md

详细介绍

Tdd With Phpunit (Symfony)

使用场景

  • 使用 PHPUnit 10/11 基于类的测试,通过 RED-GREEN-REFACTOR 推进功能开发。
  • 为新行为选择 TestCase、KernelTestCase 或 WebTestCase。
  • 测试控制台命令,或必须返回 422 的无效表单。
  • 通过测试容器将外部服务替换为测试替身。

默认工作流

  1. RED:选择基类,使用 #[Test]、#[DataProvider] 和 #[CoversClass] 编写测试,运行测试并确认失败原因正确。
  2. GREEN:编写通过测试所需的最少代码。
  3. 在测试套件全部通过的情况下进行 REFACTOR,每次更改后重新运行测试。
  4. 使用 static::getContainer()->set(Service::class, $mock) 替换外部边界。
  5. 使用 CommandTester 测试命令,或在 Symfony 8.1+ 上使用 runCommand() 和 assertCommandIsSuccessful()。
  6. 使用 assertResponseIsUnprocessable() 断言无效表单提交。

注意事项

  • 使用 PHPUnit 10+ 属性,不要使用 @test 或 @dataProvider 注解。
  • 使用 static::getContainer() 获取服务,不要使用旧版 self::$container。
  • 仅模拟真正的外部边界(HTTP 客户端、第三方 SDK);其他地方保留真实服务和真实数据库。
  • runCommand() 和 getContainer()->set() 中的闭包需要 Symfony 8.1+。

渐进式说明

  • 使用此文件了解执行方式和风险控制。
  • 需要深入了解实现细节时,请打开参考资料。

输出要求

  • 先提供失败的 PHPUnit 输出(RED),然后提供通过测试的运行结果。
  • 列出已更改的测试文件,以及使用的基类和属性。
  • 列出执行过的命令。

参考资料

  • reference.md

评论

支持 Markdown