Given-When-Then 是什么
Given-When-Then 是三段式场景描述规范:Given 写前置条件与数据状态,When 写触发动作,Then 写可观察的预期结果。它最初来自 BDD 实践,用来让业务、开发和测试对同一场景达成一致;写成这个结构的验收标准可以被业务直接读懂,也天然对应一条测试用例,是需求评审阶段发现歧义的低成本手段。
三段式
| 部分 | 作用 | 示例 |
|---|---|---|
| Given | 前置条件与数据状态 | 已登录且购物车有 1 件商品 |
| When | 触发动作 | 点击结算并提交订单 |
| Then | 可观察的预期结果 | 订单创建成功且状态为待支付 |
基本信息
| 适用场景 | 验收标准、BDD 场景、测试用例描述 |
|---|---|
| 写法要点 | 一个场景一条主流程,Then 写可观察结果 |
| 常见变体 | And/But 连接同段多个条件,多个 When-Then 拆成多个场景 |
| 落地方式 | 需求模板固定三段式,评审时逐条检查可判定性 |
典型使用场景
- 需求评审:用三段式把验收标准写成可判定的条目。
- BDD 协作:产品、开发、测试用同一套场景讨论示例。
- 用例编写:三段式直接映射测试步骤与断言,减少翻译损耗。
- 缺陷回归:复现步骤与期望结果按三段式记录,便于复刻验证。
- 接口测试:Given 准备数据、When 发请求、Then 断言响应。
- 自动化文档:场景成为可执行规格的骨架。
反例与正例
反例与正例
弱:校验余额逻辑要正确 # 无法判定
强:Given 账户余额为 100 元
When 尝试取款 150 元
Then 提示余额不足且余额保持 100 元 # 可观察、可判定Then 要写可观察结果(界面、接口响应、数据状态),避免写内部实现细节。
场景拆小:一条场景只验证一个主行为;出现多个 When-Then 链时应拆成多条场景,失败定位更容易。
Given 里的数据状态要具体:账号、金额、时间点写清楚,模糊的前置条件正是「本地能复现、换人不能」的常见来源。