首页/开发/软件测试速查/Given-When-Then 描述规范
测试基础与分层67 条

Given-When-Then 描述规范

用给定条件、操作、预期结果三段式表达测试场景:结构清晰、可被业务阅读,适合验收标准与 BDD 场景编写。

软件测试速查开发更新于 2026-10-13

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 里的数据状态要具体:账号、金额、时间点写清楚,模糊的前置条件正是「本地能复现、换人不能」的常见来源。

易错点

  • Then 写「代码调用了某方法」而不是用户可观察结果:断言与实现耦合,重构即误报。
  • 一个场景塞入多个 When-Then 链:失败时定位不到具体环节,回归执行粒度也过粗。
  • Given 写成模糊状态(如「用户已准备就绪」):不同人理解的初始数据不一致,复现偏差。
  • 把三段式当门面工程:评审只查格式不查语义,歧义照样进入开发。
  • Then 缺少数据侧断言:只校验界面提示,数据库是否被误写入无人验证。

数据来源与参考

  • Cucumber 官方文档《Gherkin Reference》(cucumber.io)
  • Dan North《Introducing BDD》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌