mcpField
T
test-doubles-mocking

test-doubles-mocking

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

关于 test-doubles-mocking

test-doubles-mocking 是用于 Symfony 测试的技能,帮助隔离协作者并验证交互。它指导选择和使用 dummy、stub、mock、spy 与 fake,并避免过度模拟。

主要功能

  1. 01按测试需求选择测试替身
  2. 02使用 PHPUnit 创建 stub 和 mock
  3. 03验证相关调用与消息
  4. 04编排返回值、异常和回调
  5. 05构建内存版仓库 fake

适用场景

  1. 01测试依赖外部服务的代码
  2. 02验证持久化或消息派发
  3. 03提供内存版仓库实现

安装

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

$npx skills add https://github.com/dev-toolings/superpowers-symfony --skill test-doubles-mocking

安装后在 Claude Code 中输入/test-doubles-mocking确认已加载。

附带文件reference.md

详细介绍

测试替身模拟(Symfony)

适用场景

  • 被测类依赖某个速度较慢、外部或非确定性的协作者,例如支付网关或消息总线。
  • 需要验证交互,例如 persist() 和 flush(),或已派发的消息。
  • 仓库需要一个实现其接口的内存假对象。
  • 需要在 dummy、stub、mock、spy 或 fake 之间进行选择。

默认工作流

  1. 根据需求选择测试替身:用 stub 提供值,用 mock 验证调用,用 fake 提供可用的简化实现。
  2. 使用 $this->createMock(Interface::class) 创建 mock,并通过 ->method('charge')->willReturn(...) 设置 stub。
  3. 仅在交互至关重要时进行验证:使用 expects($this->once())->with(...),或使用 $this->callback() 检查已派发的消息。
  4. 使用 willReturnOnConsecutiveCalls()、willThrowException() 或 willReturnCallback() 编写行为脚本。
  5. 对于仓库,编写一个实现该接口的 InMemory fake。
  6. 仅当项目已使用 Prophecy 时,才使用 ProphecyTrait、prophesize() 和 reveal()。

注意事项

  • 不要模拟被测类;部分模拟(onlyMethods())应作为最后手段。
  • 模拟接口,而非具体类。
  • 优先使用 stub 而非 mock,每个测试只编写一个 mock 断言。
  • 不要过度模拟:涉及数据库的行为应使用真实仓库编写功能测试。

渐进式展开

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

输出约定

  • 说明为每个协作者选择的测试替身类型及原因。
  • 仅验证重要的交互。
  • 如有添加 fake,将其放在 tests/Fake 下。

参考资料

  • reference.md

评论

支持 Markdown