BDD模式Skill bdd-patterns

BDD模式是一种软件开发技能,用于通过Given-When-Then结构编写业务可读的测试和规格说明,驱动实现并确保软件行为符合需求。关键词:行为驱动开发、BDD、测试、验收测试、Given-When-Then、特征文件、规格说明、业务可读。

测试 0 次安装 2 次浏览 更新于 3/25/2026

name: bdd-patterns user-invocable: 否 description: 在应用行为驱动开发模式时使用,包括Given-When-Then结构、特征文件和验收标准。在编写BDD风格的测试和规格说明时使用。 allowed-tools:

  • Bash
  • Read

BDD模式

掌握行为驱动开发模式,以编写清晰、业务可读的规范来驱动实现。

Given-When-Then结构

基本的BDD模式使用三个部分:

  • Given: 初始上下文或前置条件
  • When: 被测试的动作或事件
  • Then: 预期的结果
功能: 用户认证

  场景: 使用有效凭据成功登录
    给定 一个注册用户,邮箱为 "user@example.com"
    并且 用户有密码 "secure123"
    当 用户使用正确凭据提交登录表单
    那么 用户应该被重定向到仪表板
    并且 应该创建一个会话

特征文件组织

功能: 购物车
  作为一名顾客
  我想要管理购物车中的商品
  以便我可以购买感兴趣的产品

  背景:
    给定 我以顾客身份登录
    并且 产品目录可用

  场景: 向空购物车添加商品
    给定 我的购物车是空的
    当 我添加 "蓝色T恤" 到我的购物车
    那么 我的购物车应该包含1个商品
    并且 购物车总额应该是 $29.99

  场景: 从购物车移除商品
    给定 我的购物车包含 "蓝色T恤"
    当 我从购物车中移除 "蓝色T恤"
    那么 我的购物车应该是空的

用于数据驱动测试的场景大纲

场景大纲: 密码验证
  给定 我在注册页面
  当 我输入密码 "<password>"
  那么 我应该看到 "<message>"

  示例:
    | password    | message                        |
    | abc         | 密码太短                       |
    | abcdefgh    | 密码需要数字                   |
    | abcdefgh1   | 密码被接受                     |
    | abcdefgh1!  | 密码被接受                     |

步骤定义模式

# Ruby/Cucumber示例
给定('一个注册用户,邮箱为 {string}') do |email|
  @user = User.create!(email: email, password: 'password123')
end

当('用户使用正确凭据提交登录表单') do
  visit login_path
  fill_in '邮箱', with: @user.email
  fill_in '密码', with: 'password123'
  click_button '登录'
end

那么('用户应该被重定向到仪表板') do
  expect(page).to have_current_path(dashboard_path)
end

何时使用此技能

在以下情况下使用bdd-patterns:

  • 编写利益相关者能理解的验收测试
  • 在实现前定义行为
  • 从测试创建活的文档
  • 桥接开发人员和业务之间的沟通
  • 确保功能满足业务需求

最佳实践

  • 从用户角度编写场景
  • 保持场景专注于单一行为
  • 使用声明性语言,而不是实现细节
  • 跨场景重用步骤定义
  • 使用背景处理常见设置步骤
  • 按领域区域组织特征文件

常见陷阱

  • 编写过于技术化的场景
  • 将步骤耦合到特定的UI实现
  • 创建过于复杂的场景大纲
  • 不随着代码变化维护特征文件
  • 在一个场景中混合多个行为