测试价值与生命周期规范
www 工作副本(2026-10-21 Asia/Shanghai)
双轨:正文迁自 mvdocs test-value-and-lifecycle。
适用于开发者和 agent。未完成临时测试的验证、去留和清理,不得宣称功能已完成或 Bug 已修复。
新增功能和 Bug 修复必须有效验证,但不要求永久保存验证代码。新建的功能验证、排障和复现测试默认是临时测试。全局测试集合默认净新增为 0。长期测试必须证明不可替代的独立价值。
1. 测试分类与默认处置
| 类型 | 用途 | 默认处置 |
|---|---|---|
| 临时验证测试 | 复现 Bug、验证根因、A/B、一次性迁移检查 | 验证完成后删除,不进入长期测试集 |
| 常驻契约测试 | 保护仍有效且有独立价值的行为或不变量 | 满足准入后保留 |
| 专项验证 | 打包消费、NativeAOT、平台、性能、压力 | 写明触发条件;省略专项不得称为全量通过 |
使用 xUnit、放在 tests/、名称含 Regression,都不构成长期保留理由。
1.1 临时测试优先
开始写测试前先搜索已有测试。能表达同一契约时复用,不另建一套永久用例。
- 能独立运行的复现放系统临时目录。
- 必须碰到现有测试项目 fixture 时,放
Temporary/<任务标识>/,文件头注明「临时验证,完成后删除」。 - 临时测试必须被真实编译和执行。禁止用
.gitignore、Compile Remove、Skip制造已验证的假象。
最终准备交付的分支不得留下临时测试。已经提交过不等于可以永久保留。
2. 常驻测试准入
四项同时满足:契约明确、独立检错、长期收益、成本合理。「防止回归」不是完整理由。
另外要说明:为什么已有测试、编译器或打包检查盖不住;为什么必须进每次全局测试;运行成本和是否已删重复用例。缺一项不得从临时目录移入全局集合。
3. 默认不长期保存
探针、迁移后的旧名称扫描、只锁定私有写法或宣传文案的检查、已被其他测试覆盖的重复项、已删除功能的测试、编译器已经保证的成员存在检查。
仍有效的架构约束可以集中保留。判断依据是所保护的约束,不是「读没读源码」。
4. 执行流程
- 确认契约。能复用已有测试则不新增。
- 必要时用临时测试取得失败证据。编译环境异常不算有效失败。
- 同一触发条件在修复后通过。不得 Skip、放宽断言或删掉触发条件。
- 默认删除临时测试。保留必须满足第 2 节。
- 清理专用 helper、fixture 和进程。
- 在清理后的工作树上做模块验证。
- 在交付说明里记录第 8 节,不另建永久登记册。
无法自动化时要写明技术原因和可复查的手动步骤。单纯难写不是理由。
5. 存放与清理
清理包括只被这些测试使用的 helper 和进程,不删除仍被常驻测试使用的公共设施。不用注释或 Skip 代替删除。
6. 存量测试
已有测试不因本次通过或跑得慢就删除。删除时写明对象、原因,以及还剩什么保障。不得把零测试或 skip 报告成成功。
7. 成本
优先纯逻辑验证。热运行超过 1 秒要复核成本;超过 5 秒或含外部打包时,优先做成有触发条件的专项。阈值是复核线,不是自动删除线。日常只做模块验证。
8. 交付记录
写在任务说明里即可:
验证对象:
实现/修复前:
实现/修复后:
测试处置:临时测试已删除 / 合并至…… / 保留……
保留理由:仅保留时填写
清理结果:
最终模块验证:
专项与 UX:不适用时写明9. 完成门禁
- 同一触发条件下有修复前后证据。
- 临时测试被真实执行,并已判定去留。
- 常驻测试有准入理由。
- 临时目录在最终分支为空。
- 全局测试净新增有不可替代性说明。
- 清理后的模块验证映射有效。
- 适用的 UX、AOT、平台、资源生命周期专项已完成或明确标成未完成。
任一项未完成,必须报告「未完成」及缺项。测试数量没有增加、临时复现已经删除,本身不是验收失败。runner 退出码 0 不等于满足全部门禁。
文档状态:www 工作副本。本规范不表示本仓 CLI 已自动判定测试价值。