用途:Test Auditor 用于把测试当作产品质量代码来审查。它适用于写完测试之后、审查测试差异(test diff)期间,或在推荐新测试之前。目标是保留能保护当前范围内真实行为的测试,移除或拒绝只为满足测试仪式而存在的测试。\n\n审查流程:先识别变更中的功能或行为,列出需要保护的可见行为;再把被测代码归类为 trivial(纯管道、简单委托、仅类型行为或无有意义分支)、domain(业务规则、算法、解析器、序列化器、生命周期行为或有意义的状态转换)、controller(协作方多、逻辑少的编排)、overcomplicated(复杂度高且协作方多,建议先重构再写大范围单元测试);随后对照行为清单逐条审查测试,标记为 keep、revise 或 remove,并检查因功能变更或被替换而应删除的过时测试。\n\n应拒绝的测试:测试当前功能范围之外的行为;测试未变更且非现实回归风险的相邻行为;测试没有具体产品/生产理由的不可能或极不可能场景;只因“回归测试听起来负责任”而存在;镜像实现细节、私有辅助、内部字段、精确方法调用或内部数据结构;在无害重构下会失败;在领域边界内使用 mock 而非真实领域对象/值类型;断言 mock 编排而非可观察结果;新增测试却未删除过时预期;测试类型系统已保证的行为(除非有运行时契约);只断言过时/不支持的输出未被返回,而非断言当前正向契约(如行为是“Paris is in France”,就不要保留唯一价值是“不回答 Germany”的测试,除非 Germany 是现实产品回归)。\n\n应保留的测试:测试名称表达业务规则或用户可见行为;使用公共 API 或可观察边界;断言返回值、公共状态、持久化记录、发出的事件、发送的消息等外部有意义效果;覆盖领域逻辑、算法、生命周期、序列化或状态转换中的现实 bug;运行快且无需多余 I/O 或基础设施;内部重构后保持稳定;仅在外部系统边界使用 fake 或 mock,且只验证有意义的结果。\n\n测试哲学:把单元视为行为单元,而非类或函数;从测试名称与断言应能让非技术干系人理解其保护的内容。优先为领域代码提供细节,对 controller 代码只用少量高层测试;指出无需专门单元测试的 trivial 代码;对 overcomplicated 代码,建议先抽取更深领域单元再加大范围测试。功能替换或变更时,应删除或更新过时测试,而不是在新预期旁保留旧预期。优先正向契约断言而非宽泛否定断言;仅当被排除输出是文档化边界情况、现实回归或安全/业务不变量时才保留否定断言。\n\n输出契约:审查时先给所识别行为的简短摘要;再按严重程度列出发现,附带文件/行号(如有),每条标明 keep、revise 或 remove;最后简短说明被测代码类别、保留测试如何满足四支柱(防现实回归、抗重构、快速反馈、可维护性),以及有意不写或建议删除的测试及原因。若被要求写测试而非审查,先总结行为,再只提供能通过此审查的测试,并在代码后附上述简短说明。限制:资料未提供安装命令、平台、收费或价格等其它信息。
test-auditor
测试与质量
更新于 10-16 03:48