《Cucumber:行为驱动开发指南》——2.3 创建步骤定义

2.3 创建步骤定义

先不要过多考虑之前Cucumber输出的代码片段是什么意思,我们先把这些代码复制并粘贴到一个Ruby文件中。和特性文件一样,Ruby期望在约定俗成的位置找到步骤定义:

$ mkdir features/step_definitions
现在在fetures/step_definitions目录下创建一个名为calculator_steps.rb的文件,只要这是一个Ruby文件,Cucumber并不介意你给这个文件起什么名字,但这里我们给这个文件起的名字其实不错。接着用编辑器打开该文件并粘贴下面的代码片段:

下载first_taste/02/features/step_definitions/calculator_steps.rb
Given /^the input "([^"]*)"$/ do |arg1|
 pending # express the regexp above with the code you wish you had
end

When /^the calculator is run$/ do
 pending # express the regexp above with the code you wish you had
end

Then /^the output should be "([^"]*)"$/ do |arg1|
 pending # express the regexp above with the code you wish you had
end

运行cucumber,它会告诉我们下一步做什么:

Feature: Adding

 Scenario: Add two numbers   
  Given the input "2+2"    
   TODO (Cucumber::Pending)
   ./features/step_definitions/calculator_steps.rb:2
   features/adding.feature:4
  When the calculator is run 
  Then the output should be "4" 

1 scenario (1 pending)
3 steps (2 skipped, 1 pending)
0m0.003s

场景已经从未定义(undefined)升级到了待定(pending)。这是个好消息,因为它说明Cucumber正在运行第一个步骤,不过在此过程中它撞上了我们复制并粘贴的那些步骤定义代码中的pending标记,pending的意思是告诉Cucumber这个场景还是一个正在进行中的工作。我们需要用真正的实现替换掉这个pending标记。

注意,Cucumber报告它跳过了另外两个步骤,只要遇到了失败的或者待定的步骤,Cucumber就会停止运行当前场景并跳过该场景剩余的步骤。

下面我们来实现第一个步骤定义。

时间: 2024-09-20 08:50:37

《Cucumber:行为驱动开发指南》——2.3 创建步骤定义的相关文章

“Cucumber行为驱动开发指南”能带给我们什么

介绍 或许你已经了解到了软件开发中一个头疼的事,就是如何产生正确的需求和围绕这些需求如何有效地进行软件开发?但又不知如何着手? 或许你已经了解到了一些相关的理论知识来解决这个难题,如:行为驱动开发(BDD),验收测试驱动开发(ATDD),实例化需求(Specification By Example),但却发现很难消化所有的信息? 或许你已经建立了一套相关的自动化测试,但总觉得在为测试而测试,没有解决实际问题,有点脱钩? 或许你已经开始着手建立自动化测试来做保障,但对那么多的工具无从选择? 也或许

《Cucumber:行为驱动开发指南》——第1章 为何使用Cucumber 1.1自动化验收测试

第1章 为何使用Cucumber 软件始于一个想法. 我们假设这是一个优秀的想法--一个能让世界变得更加美好,或者至少能让一些人赚到一些钱的想法.而软件开发人员所面临的挑战就是要落实这个想法,使其能真正产生效益. 最初的想法是完美.漂亮的.如果拥有该想法的人碰巧是一个天才软件开发人员,那事情就非常简单了:他无须向任何人解释就能直接把想法实现成可工作的软件.然而更常见的情况是,拥有最初想法的人并不具备使其想法变为现实所必需的编程技能,因此这个想法必须从他的脑中传递到另外一些人的脑中.也就是说,相关

《Cucumber:行为驱动开发指南》——6.3 照管好你的测试

6.3 照管好你的测试 自动化特性的好处在于你可以把它们作为活文档来长期信赖,因为你会将每一个场景都用于检查产品代码,以确保它们仍然有效.对于同代码打交道的程序员来说,这还有另一件好处:在他们开发系统的时候,那些测试可以充当安全网,对任何破坏已有行为的错误都给出警告. 因此,你的特性可以充当一种反馈机制,对整个团队来说提供关于系统行为的反馈,对程序员来说还能提供是否破坏已有行为的反馈.想让这些反馈循环带来好处,测试需要执行迅速,还需要可靠.我们首先来看看影响测试可靠性的问题.6.3.1 渗露的场

《Cucumber:行为驱动开发指南》——6.2 同心协力

6.2 同心协力 6.2.1 偶然细节考虑下面这个为在线邮件客户端编写的场景: Scenario: Check inbox Given a User "Dave" with password "password" And a User "Sue" with password "secret" And an email to "Dave" from "Sue" When I sign in

《Cucumber:行为驱动开发指南》——2.9 我们学到了什么

2.9 我们学到了什么 在本章中我们快速浏览了许多不同的内容,所有这些内容都会在后面再次详细介绍,现在来做一个简单的小结并强调几个最重要的地方. 2.9.1 目录结构Cucumber希望你用约定的目录结构来存储特性和步骤定义: features/ adding.feature - step_definitions/ calculator_steps.rb - 如果你真的需要,也可以传递参数给Cucumber,从而改变默认结构,优先使用自己指定的目录结构,但这种按约定存储文件的方法是最简单的. 2

《Cucumber:行为驱动开发指南》——1.2 行为驱动开发

1.2 行为驱动开发 行为驱动开发(Behaviour-Driven Development,BDD)1建立于测试驱动开发的基础之上,它标准化了那些优秀TDD实践者的良好习惯.优秀的TDD实践者以自外向内的方式开发软件,最初他们会编写一个失败的客户验收测试,该测试从客户的视角描述系统的行为.作为BDD实践者,我们细心编写验收测试,作为所有团队成员都能读懂的实例.我们使用这个编写实例的过程来获取业务人员的反馈,以便在开始实现软件之前,我们就知道自己是否是在编写正确的软件.在此过程中,我们会主动开发

《Cucumber:行为驱动开发指南》——2.7 添加一个断言

2.7 添加一个断言 继续遵照Cucumber的指示,我们需要为计算器程序创建一个Ruby文件.让我们暂时先创建一个空的Ruby文件,这样在转入解决方案之前,我们可以继续停留在外部并完成测试.Linux/Mac用户可以用如下命令创建空文件: $ touch calc.rb 如果用的是Windows,就无法使用touch命令了,可以用编辑器创建一个名为calc.rb的空文本文件,或者使用如下技巧: C:\> echo .> calc.rb 当我们再次运行cucumber的时候,就可以看到第二个步

《Cucumber:行为驱动开发指南》——1.5 我们学到了什么

1.5 我们学到了什么 我们来回顾一下到目前为止讨论了哪些内容. 只有开发人员和利益相关人一起清晰地交流的时候,软件团队才能工作得最好.要做到这一点有一种非常好的方法,就是让开发人员和业务人员基于自动化验收测试,协作描述需要完成的工作. 当验收测试以实例的形式编写时,它就能够激发人们的想象力,帮助人们发现之前未曾虑及的其他场景. 当团队协作编写验收测试时,他们可以开发出专属于相应问题领域的通用语言.这能帮助他们避免误解. Cucumber 的设计就是要帮助利益相关人参与到编写验收测试的过程中去.

《Cucumber:行为驱动开发指南》——2.5 运行程序

2.5 运行程序 接下来我们实现下一个步骤,编辑 features/step_definitions/calculator_ steps.rb,修改第二个步骤定义如下: 下载first_taste/04/features/step_definitions/calculator_steps.rb When /^the calculator is run$/ do
 @output = `ruby calc.rb #{@input}` raise('Command failed!') unless