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实现
- 创建过于复杂的场景大纲
- 不随着代码变化维护特征文件
- 在一个场景中混合多个行为