P333 · 上下文管理

把行为要求绑定到执行点和测试

Bind Behavioral Specs to Enforcement and Tests

为要求分配稳定标识,关联实际执行位置,并保留测试和不确定性记录。

编辑审核

以下示例与示意结果由本站编写,用于说明方法,不是模型实测结果。

使用场景

你在整理已有订单行为,准备把展示标题“拒绝空订单”改成“空订单校验”。教学代码显示 Checkout 同步调用 OrderService.validateEmptyOrder,后者在 lines 为空时抛出 EMPTY;已有测试 OrderServiceTests.rejectEmptyOrder 覆盖空数组。另一个异步消费者尚未读取。

具体做法

读取实际检查位置和调用链,用已确认的执行点作为稳定身份,另外保存可修改的展示标题、实体与已有测试引用。改标题时更新同一记录,不能创建一个重复行为。依赖和触发关系只记录可直接追溯的调用;未知执行点或测试不靠邻近文件名填满,异步路径保留未决。

反例

用展示标题当行为 id。把“拒绝空订单”改名后创建新需求,丢掉旧测试链接;看到旁边有 worker 文件就推断所有异步路径都执行了同样检查。

改进写法

依据上述已读代码记录稳定 id=OrderService.validateEmptyOrder,执行点与空数组测试分别引用真实位置,实体为 Order。展示标题改成“空订单校验”时更新同一 id,保留测试关联。Checkout 的同步调用有证据;未读异步消费者列为未决,不推断跨模块依赖或全路径覆盖。输出变更记录和未确认关系。

为什么这样改

行为身份与可读标题分开,文字改名不会切断源码和测试的连续关系。只保留有调用证据的关系,又避免把一份局部记录包装成整个系统的强制规则。

如何验证

示意增量只更新同一 id 的标题,仍有执行点和测试链接;异步消费者状态为未确认。检查没有新建同义需求、没有删除测试关联,也没有在未读路径上声明已执行。

源码指针说明检查存在,实际测试是否通过仍需相应运行记录,本例不把测试存在写成已通过。

适用边界

函数移动或改名可能需要明确的身份迁移,不能把文件名当永久真理。源码提取描述当前实现,不证明业务规范正确;一个调用和测试都不能证明所有路径覆盖。

原文与版本

如何收录这些方法