一、什么是 BDD

BDD Behavior‑Driven Development,行为驱动开发,是从 TDD 测试驱动开发 演进而来的敏捷开发方法论。

核心思想:用业务人员、产品、开发、测试都看得懂的自然语言,描述系统行为,再把这份描述直接变成可执行测试,打通需求‑开发‑测试。

1.1 BDD 解决什么痛点

传统模式痛点:

  1. 产品写需求文档,语言模糊、有歧义
  2. 开发按自己理解实现代码
  3. 测试按自己理解写用例
  4. 最后上线发现:大家理解的不是同一个东西

TDD 痛点:TDD 是开发者视角,写单元测试代码,业务人员看不懂测试用例。

BDD 做法:

所有人用统一的语言描述:当发生什么事情、做什么操作、应该得到什么结果。这份文档既是需求说明,又是自动化测试脚本

1.2 BDD 核心关键词

  • 行为 Behavior:系统对外表现出来能做什么,而不是内部怎么实现
  • 通用语言 Ubiquitous Language:业务、开发、测试共同认可的术语
  • Gherkin:自然语言脚本格式,用来描述场景
  • Given‑When‑Then:BDD 标准句式

二、Given‑When‑Then 模型

这是 BDD 场景标准三段式结构

关键字含义
Given前置条件、初始状态,系统处于什么环境
When触发动作,用户 / 外部做了什么操作
Then预期结果,系统应该产生什么行为

可选关键字

  • And / But:用来拼接多条 Given / When / Then

举一个最简单业务例子:用户登录

不用 BDD 口语描述:用户输错密码不能登录。 BDD 标准场景写法 Gherkin

Feature:用户登录功能
  As一个用户
  I want能够登录系统
  So that可以访问个人中心

  Scenario:密码错误时登录失败
    Given 用户账号是admin
    And 用户密码是错误密码123456
    When 用户提交登录请求
    Then 返回登录失败提示
    And 不能进入首页

这份 Gherkin 文件普通人都看得懂,同时可以被 BDD 框架解析,自动跑测试。

三、BDD 和 TDD 的区别

维度TDD 测试驱动开发BDD 行为驱动开发
视角开发者视角,函数、方法、类业务视角、系统对外行为
语言Java/Python 代码写测试自然语言 Gherkin + 代码实现
受众开发人员产品、测试、开发、业务方全员
粒度偏向单元、方法级别偏向业务功能、用户场景
关注点代码是否正确业务行为是否符合需求
关系BDD ≠ 取代 TDD;BDD 高层场景,TDD 底层单元

简单一句话: TDD:先写测试代码,再写业务代码 BDD:先用自然语言定义业务行为,再开发 + 自动化验证这个行为

四、Java 生态主流 BDD 框架

Java 最常用两套

  1. Cucumber-JVM:业界最标准 BDD 框架,支持 Gherkin
  2. Spock:Groovy,偏向单元层面 BDD 本文选用 Cucumber + JUnit5 + Maven,完整可运行 Demo

Cucumber 原理

整体流程:

  1. 编写.feature文件,使用 Gherkin 自然语言,描述场景
  2. 编写步骤定义 Step Definition Java 代码,把每一句 Gherkin 语句绑定到一段 Java 执行代码
  3. 运行测试,Cucumber 解析 feature,逐条执行对应的 Java 代码,校验结果
  4. 生成测试报告

feature 文件 和 Java 代码通过注解绑定,文字匹配方法。

五、BDD 完整开发流程

标准 BDD 开发流程,俗称3 个朋友讨论

产品、开发、测试三方一起开会,梳理业务场景

  1. 示例梳理 Example Mapping 示例映射 讨论这个功能有哪些场景,正常场景、异常场景
  2. 使用 Gherkin 编写 Feature、Scenario,用 Given‑When‑Then 写出清晰行为
  3. 评审 feature 脚本,所有人确认需求理解一致
  4. 开发人员编写业务代码 + 实现 Step 步骤代码
  5. 运行 Cucumber 测试,验证行为
  6. 如果失败,修复代码直到场景全部通过
  7. feature 文件长期维护,成为活文档Living Documentation
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐