首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

用Cucumber进行行为驱动开发,该怎么解决

2012-03-14 
用Cucumber进行行为驱动开发原文请看我的英文博客:http://xizhizhu.blogspot.com/2009/11/behavior-driven

用Cucumber进行行为驱动开发
原文请看我的英文博客:http://xizhizhu.blogspot.com/2009/11/behavior-driven-development-through.html

Cucumber 是一个能够理解用普通语言 描述的测试用例的支持行为驱动开发(BDD)的自动化测试工具,用Ruby编写,支持Java和.Net等多种开发语言。


首先安装Cucumber 并添加环境变量 :
sudo aptitude install ruby rubygems1.8 rake
sudo gem install cucumber
PATH=$PATH:/var/lib/gems/1.8/bin

此时,如果执行命令“cucumber --version”能够看到输出Cucumber的版本号(目前最新版是0.4.4),则表明安装已经成功。


现在看看Cucumber中用到的术语 。

在Cucumber中,每个用例用一个feature表示 ,其基本格式如下:
Feature: 描述
  <story>

  <scenario 1>
  ...
  <scenario N>

其中,story对feature进行描述 ,其常用格式如下:
In order <目的>
As a <角色>
I want <功能描述>
So that <商业价值>

每个feature可由若干个scenario 构成,用以描述系统的行为 ,其常用格式如下:
Scenario Outline: 描述
  Given <条件>
  When <事件>
  Then <结果>
如果有多个条件等,可以用关键字And或But进行连接。每个步骤中,可选参数用"<>"标识。

scenario中的每个步骤都需要被定义 ,其格式如下:
关键字 /正则表达式/ do |参数名|
  代码
end
这里 的参数来自于正则表达式,均为字符串类型。


下面看看如何用Cucumber进行开发 (参考自这个 例子)。

首先编写feature ,并保存为feature/addition.feature文件:
Feature: Addition
  In order to avoid silly mistakes
  As a math idiot
  I want to be told the sum of two numbers
 
  Scenario Outline: Add two numbers
  Given I have entered <input_1> into the calculator
  And I have entered <input_2> into the calculator
  When I press <button>
  Then the result should be <output> on the screen
 
  Examples:
  | input_1 | input_2 | button | output |
  | 20 | 30 | add | 50 |

然后用Ruby语言定义scenario中的每个步骤 ,并保存为features/step_definitions/addition.rb文件:
Given /I have entered (\d+) into the calculator/ do |n|
  @calc = Calculator.new
  @calc.push n.to_i
end

When /I press (\w+)/ do |op|
  @result = @calc.send op
end

Then /the result should be (.*) on the screen/ do |result|
  @result.should == result.to_f
end

最后编写相应代码 :
class Calculator
  def push(n)
  @args ||= []
  @args << n
  end
 
  def add
  @args.inject(0){|n,sum| sum+=n}
  end
end

并进行测试 :
cucumber feature/addition.feature

如果得到类似于以下的结果,则表明代码无误:
1 scenario (1 passed)
4 steps (4 passed)
0m0.009s

否则,会得到红色提示,则需要修改相应代码。

[解决办法]
嗯。不错,值得分享

热点排行