SuperAPI AI 工具集

testing-tdd-london

测试与质量

查看项目

更新于 10-16 04:06

技能介绍

用途

TDD London School (Mockist) 是一个面向 mock 驱动、由外向内开发的专项技能,聚焦对象协作与行为验证。它用于测试对象之间的协作与消息传递,适合契约驱动开发、由外向内从用户行为出发的开发、需要严格隔离单元的场景、服务编排测试,以及验证「对象如何协作」(而不是「对象包含什么状态」)。

前置条件

  • 理解 mock 对象与 stub 的区别
  • 使用 Jest、Vitest 或类似支持 mock 的测试框架
  • 架构中有清晰的关注点分离
  • 代码库采用依赖注入模式

核心概念

伦敦学派与芝加哥学派的对比:伦敦学派关注行为/交互,隔离方式是 mock 所有协作者,方向为由外向内,测试「对象如何对话」,耦合于实现;芝加哥学派关注状态,使用真实对象,方向为由内向外,测试「对象产出什么」,耦合于行为。

由外向内开发流程:先写失败的验收测试,然后是控制器测试、服务测试、仓储测试,最后自底向上实现使测试通过。

Mock 类型:Stub 返回预设响应;Mock 验证交互;Spy 包装真实对象并记录调用。

实现模式

资料给出三种模式:由外向内开发(从最外层验收测试开始,mock 所有协作者并验证对象之间的对话);交互测试(验证调用顺序、调用参数等);通过 mock 定义契约(为协作者定义输入、输出、交互,并从契约生成 mock)。

配置

资料给出 london_tdd_config 示例,包含 testing(框架为 jest、mock 库、strict_mocks)、coverage(interaction_coverage、verify_all_mocks)、swarm_coordination(share_contracts、sync_mock_definitions)、patterns(verify_call_order、verify_call_count、verify_call_args)。

使用示例

资料给出三个示例:服务编排测试(验证 prepare、process、finalize 的调用顺序与数据流转)、错误处理验证(验证仓储失败时的日志与重试交互)、Swarm 协调测试(跨 agent 共享 mock 契约)。

执行清单

编写失败的验收测试(外层);为所有协作者定义 mock 契约;为下一层编写失败的单元测试;实现最小代码使测试通过;验证所有 mock 交互;在测试保持绿色的前提下重构;进入下一个内层;如需协调则与 swarm 共享契约。

最佳实践

Mock 管理:保持 mock 简单且聚焦单一行为;验证交互而非实现细节;使用 jest.fn() 做行为验证;避免过度 mock 内部细节;在测试之间重置 mock。契约设计:通过 mock 期望定义清晰接口;关注对象职责与协作;用 mock 驱动设计决策;保持契约最小且内聚。

常见陷阱

避免过度 mock 内部细节(如私有方法),只 mock 公开接口;避免验证过多实现细节(如精确调用次数),而应验证关键行为。错误处理方面:始终验证 mock 是否按预期被调用,可使用严格 mock;在 beforeEach 中通过 jest.clearAllMocks() 或 jest.resetAllMocks() 重置 mock,避免测试间泄漏。

度量与成功标准

交互覆盖率 100%(所有协作者调用被验证);Mock 隔离 100%(单元测试中无真实依赖);契约一致性 100%(mock 与真实接口一致);测试速度每测试 < 100ms(无 I/O)。

集成点

资料提及 MCP Tools:可存储成功的测试模式与跨 swarm 共享契约;以及 Hooks 的 pre-test(与 swarm 协调)和 post-test(共享结果)。相关技能包括 testing-production、planning-code-goal、webapp-testing。

版本

1.0.0(2026-01-02):首次发布,由 tdd-london-swarm agent 转换而来。

限制

实际收费、具体价格与平台支持范围资料中暂未提供。