ia-writing-tests

🧪 测试编写黄金规范:从原则到反模式

通用测试编写规范:从测试金字塔到反模式识别,强制要求真实断言与结果验证,覆盖单元/集成/E2E分层策略及LLM生成测试的常见陷阱检测

收藏
4.6k
安装
1.1k
版本
4.1.1
CLS 安全扫描中
预计需要 3 分钟...

使用说明

Writing Tests:通用测试编写规范评估

核心定位

本技能定位为跨语言、跨框架的测试编写原则指南,强调"测试必须能够失败"这一根本前提,反对以Mock为中心的"测试剧场",主张用真实对象验证真实行为。

核心用法

1. 测试金字塔分层策略

  • 单元测试(~80%):毫秒级、隔离、无外部依赖,构成反馈基础
  • 集成测试(~15%):验证组件边界——真实数据库、服务层联动、队列消费
  • E2E测试(~5%):关键用户路径,需论证维护成本

2. 三重来源覆盖率验证

强制要求每个测试项映射到至少一个来源:

  • 用户需求(规格/工单/对话)
  • 已实现功能(代码diff扫描)
  • 响应中的声明(即将告知用户的功能)

3. DAMP优于DRY原则

测试应独立可读,允许重复以降低认知负担,仅在"减少噪声且不隐藏意图"时提取共享设置。

4. 真实对象优先矩阵

| 用真实对象 | 用Mock/Fake |
|-----------|-------------|
| 数据库查询(测试库) | 外部HTTP API |
| 内部服务类 | 支付网关 |
| 临时目录文件操作 | 邮件/SMS发送 |
| 业务逻辑转换 | 带限流的第三方SDK |

例外:框架专用测试替身(如Laravel Queue::fake()、React测试提供者)属惯用做法。

显著优点

1. 反模式识别深度:涵盖11种具体反模式,包括AI生成测试的6类特征性缺陷(Mock被测系统、循环断言、未审查快照、无断言执行、过度宽泛匹配器、实现回声断言)

2. 缺陷覆盖策略:独创"静默失败检测"清单,强制要求对空catch块、被吞没的reject、缺失async处理等路径添加可观测信号断言

3. 证明模式(Bug修复):强制"失败→通过"双运行验证,确保测试捕获的是真实缺陷而非巧合

4. 状态污染诊断:提供"整数倍差异"诊断法识别持久化测试基础设施的跨运行污染

5. 框架互补设计:明确区分原则层(本技能)与实现层(ia-php-laravelia-react-frontend),避免重复

潜在局限

1. 未覆盖性能测试:专注功能正确性,未涉及负载/压力/基准测试规范

2. 缺失变异测试:未讨论mutation testing作为覆盖率质量补充手段

3. 并发测试深度有限:虽提及竞态条件,但未系统覆盖多线程/分布式系统的确定性测试策略

4. 契约测试缺席:微服务场景下消费者驱动契约(CDC)测试未涉及

5. 测试数据管理:仅提及fixture和工厂,未深入测试数据生命周期治理(如PII脱敏、数据子集策略)

适合人群

  • 全栈开发者:需要在不同技术栈间保持一致测试质量标准的团队
  • 代码审查者:需要系统性的测试质量检查清单
  • AI辅助编程用户:需要识别和修正LLM生成测试陷阱的开发者
  • 遗留代码维护者:面临"无测试→不敢重构→更难测试"死锁的团队

常规风险

| 风险类别 | 具体表现 | 缓解措施 |
|---------|---------|---------|
| 过度Mock化 | 测试通过但生产崩溃 | 强制真实对象优先矩阵,仅在外部边界使用Mock |
| 实现耦合测试 | 重构导致测试成批失败 | 断言结果而非调用次数/参数 |
| 假阴性安全感 | 高覆盖率但关键路径未覆盖 | 三重来源验证,静默失败检测 |
| 测试维护成本失控 | E2E测试膨胀拖慢反馈 | 严格执行5%E2E上限,持续论证成本 |
| 状态泄漏污染 | 本地通过CI失败/反之 | 强制短暂容器化基础设施,禁用自清理假设 |
| LLM生成陷阱 | 循环断言、Mock被测系统 | 提交前强制6项AI测试气味扫描 |

集成关系

  • 上游调用ia-work(功能开发Phase 2)、ia-debugging(缺陷重现)、ia-verification-before-completion(完成前验证)
  • 下游依赖ia-php-laravelia-react-frontend(框架具体实现)

总体评估

作为测试原则层的权威参考,本技能在反模式识别、缺陷检测策略、AI生成测试审查方面具有显著独创价值。其局限性(性能测试、契约测试)由明确的技能边界声明所界定,不构成质量缺陷。建议作为所有项目测试规范的强制性基准,配合技术特定技能形成完整测试能力矩阵。

ia-writing-tests 内容

references文件夹
手动下载zip · 12.3 kB
rationalization-table.mdtext/markdown
请选择文件