SuperAPI AI 工具集

test-doubles-mocking

测试与质量

查看项目

更新于 10-15 21:08

技能介绍

用途:当被测类依赖慢速、外部或非确定性的协作者(如支付网关、消息总线),或需要验证 persist()、flush()、消息派发等交互,或需要为仓储提供内存假实现时,使用本技能创建测试替身。

主要能力:按需选择替身类型——stub 提供返回值、mock 验证调用、fake 提供可工作的简化实现;用 $this->createMock(Interface::class) 创建,用 ->method('charge')->willReturn(...) 打桩;仅在交互重要时验证,如 expects($this->once())->with(...),或用 $this->callback() 检查派发的消息;用 willReturnOnConsecutiveCalls()、willThrowException() 或 willReturnCallback() 编排行为;为仓储编写实现接口的 InMemory fake;仅当项目已依赖 Prophecy 时使用 ProphecyTrait 配合 prophesize() 与 reveal()。

使用方式:先按需求挑选替身类型,再创建并打桩,最后只验证真正重要的交互。

限制与护栏:不要 mock 被测类本身,部分 mock(onlyMethods())是最后手段;mock 接口而非具体类;优先 stub 而非 mock,每个测试只保留一个 mock 断言;不要过度 mock,涉及数据库的行为应放在使用真实仓储的功能测试中。

输出约定:说明每个协作者所选替身类型及原因、所验证的交互(仅限重要者)、以及在 tests/Fake 下新增的 fake(如有)。

更多实现细节见 reference.md。