📜  行为驱动开发教程(1)

📅  最后修改于: 2023-12-03 15:41:32.494000             🧑  作者: Mango

行为驱动开发(BDD)教程

行为驱动开发(BDD)是一种高度可读性的软件开发方法,它强调在开发进程中必须从客户需求、用户场景出发,并且通过给出实例场景,构建测试用例,促进开发过程中需求和实现的一致性,让开发团队和业务团队更加高效地协作。

BDD的基本思想

BDD的核心是故事(stories),它描述了一个特定的特性应该如何在特定上下文(或称为场景)中表现的完整描述,通过完整而清晰的描述,可以更好地理解业务需求。

BDD遵循三个主要的行为:Given (前提条件)、When(执行操作)和Then(结果)。

  • "Given" 参数用来描述测试场景的初始状态
  • "When" 参数确定了需要被测试的行为
  • "Then" 参数描述了预期的结果
BDD的基本流程

BDD流程可以概括为如下的几步:

  1. 查找或定义用户故事并得出述语 "As a <用户角色>,I want <某事>,So that <目标>"
  2. 确定场景和情境
  3. 编写行为描述,尽量遵循“Given-When-Then”原则
  4. 编码测试用例,编写相应的测试代码
  5. 运行测试,测试没通过,开始写代码实现
  6. 测试通过,开始重构代码
  7. 循环迭代完善
BDD的实践

在实践BDD前,需要确定你的团队让每个人都对应何种角色,定义好如下要素:

  • 制品持有者(product owner)
  • 目标客户 (target customer)
  • 委托开发人员/测试人员 (delegated developers/testers)
  • 面向开发人员/测试人员 (development-oriented/test-oriented)。
BDD测试框架

BDD测试中常用的测试工具和框架还是Cucumber和RSpec, BDD测试的代码实现遵循Gherkin语法。

示例代码

文件 demo.feature

Feature: 模拟核实登录

场景: 登录校验

  假设网址 "http://localhost:3000"

  Given 我是一个未登录的用户

  When 我输入了正确的用户名和密码

  Then 我应该被重定向到我的用户主页

场景: 登录

  假设网址 "http://localhost:3000"

  Given 我是一个未登录的用户

  When 我输入了错误的用户名和密码

  Then 我应该看到登录错误消息并且仍然停留在登录页上

文件 demo.rb

前提(/^网址 "([^"]*)"$/) do |url|
  visit url
end

假如(/^我是一个未登录的用户$/) do
end

当(/^我输入了正确的用户名和密码$/) do
  fill_in 'username', :with => 'example_user_name'
  fill_in 'password', :with => 'example_password'
  click_button '登录'
end

那么(/^我应该被重定向到我的用户主页$/) do
  expect(current_path).to eq(user_path)
end

当(/^我输入了错误的用户名和密码$/) do
  fill_in 'username', :with => 'example_user_name'
  fill_in 'password', :with => 'wrong_password'
  click_button '登录'
end

那么(/^我应该看到登录错误消息并且仍然停留在登录页上$/) do
  expect(page).to have_content('Error: Invalid password.')
  expect(current_path).to eq(new_session_path)
end
总结

行为驱动开发(BDD)是一种基于用户故事,从用户需求和实际业务场景出发,结合实例场景,编写高可读的测试用例,促进开发人员和业务团队的更好协作的开发方法。在实践中,我们可以在BDD测试框架中编写Gherkin风格测试用例,然后编写Ruby/Rails测试代码。在这个过程中,我们需要多加讨论、碰撞,在每个迭代中实现更好的质量和可维护性。