《Cucumber:行为驱动开发指南》——2.2 创建一个特性

简介: Gherkin特性是面向业务的,再往下一层是步骤定义,不过在探索这一层之前有必要快速看一看全局图,以防有人感到困惑。图2-1可以提醒我们各种元素是如何组织在一起的,我们从包含场景和步骤的特性开始,场景中的步骤会访问步骤定义,后者将Gherkin特性和我们构建的应用程序连接在一起。

本节书摘来自异步社区《Cucumber:行为驱动开发指南》一书中的第2章,第2.2节,作者:【英】Matt Wynne , 【挪】Aslak Hellesy著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.2 创建一个特性

Cucumber测试都归类为特性(feature)。我们使用这个名字是希望用它描述用户运行程序时使用的一些特性。首先我们要创建一个目录,该目录存放程序文件以及我们即将编写的特性文件。

$ mkdir calculator
$ cd calculator

我们要让 Cucumber 引导整个计算器程序的开发过程,于是我们首先在这个空目录下运行一下cucumber命令:

$ cucumber

You don't have a 'features' directory. Please create one to get started. 
See http://cukes.info/ for more information.

由于我们没有声明任何命令行参数,Cucumber会认为我们使用了默认的features文件夹存放测试。这没什么问题,只是目前我们还没有任何测试。我们遵循这一目录结构的约定来创建一个features目录:

$ mkdir features
然后再运行一下Cucumber:

$ cucumber

0 scenarios
0 steps
0m0.000s

每个 Cucumber 测试称为一个场景(scenario),每个场景都包含一些步骤(step),这些步骤告诉Cucumber具体做什么。上述的输出说明Cucumber现在已经能够正确扫描features目录了,不过它还没找到可运行的场景。下面我们来创建一个场景。

我们的用户调查显示,67%的数学运算是加法,因此加法是我们首先要支持的运算。你可以打开自己最喜欢的编辑器,创建一个名为featur``es/adding.feature的文本文件,在其中添加如下内容:

下载first_taste/01/features/adding.feature
Feature: Adding

 Scenario: Add two numbers
  Given the input "2+2"
  When the calculator is run 
  Then the output should be "4"

这个.feature文件包含了计算器程序的第一个场景。我们将上一节的一个实例翻译成了Cucumber场景,以后我们可以让计算机一遍又一遍地运行这个场景。或许你已经看到,Cucumber对这个文件的结构实际上是有一些要求的,结构就是这里的Feature、Scenario、Given、When、Then等关键字,其他的所有内容都是文档。虽然书中这些关键字被标粗了(可能你的编辑器也会将它们标亮),但该文件只是简单的文本文件。这个结构就叫做Gherkin。

保存文件内容,然后运行cucumber,你应该能看到比上次多了好些输出:

$ cucumber

Feature: Adding

 Scenario: Add two numbers   # features/adding.feature:3
  Given the input "2+2"    # features/adding.feature:4
  When the calculator is run   # features/adding.feature:5
  Then the output should be "4" # features/adding.feature:6

1 scenario (1 undefined)
3 steps (3 undefined)
0m0.003s

You can implement step definitions for undefined steps with these snippets: 

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

If you want snippets in a different programming language,
just make sure a file with the appropriate file extension
exists where cucumber looks for step definitions.

哇,突然来了这么多输出!让我们看看究竟发生了什么。首先,我们能看到Cucumber找到了我们的特性并尝试运行它,这一步非常明白,因为Cucumber已经把这个特性的内容照搬到了终端上。你可能还注意到了输出摘要中原来的0 scenarios已经变成了1 scenario``(undefined),这表示Cucumber已经读取了我们的特性中的场景但还不知道如何运行它。

其次,Cucumber打印了三段代码,它们是用Ruby编写的步骤定义(step definition)样例代码,用来告诉Cucumber如何将日常英语描述的步骤翻译成一系列运行在我们应用程序之上的动作。下一步我们要做的就是将这些代码片段放入Ruby文件,然后开始丰富这些代码。

Gherkin特性是面向业务的,再往下一层是步骤定义,不过在探索这一层之前有必要快速看一看全局图,以防有人感到困惑。图2-1可以提醒我们各种元素是如何组织在一起的,我们从包含场景和步骤的特性开始,场景中的步骤会访问步骤定义,后者将Gherkin特性和我们构建的应用程序连接在一起。

screenshot


图2-1 Cucumber测试集的主要层次

现在我们将实现一些步骤定义,那样场景就不再是未定义(undefined)的了。

相关文章
|
前端开发 JavaScript 开发者
封装库/工具库中重要概念之UI框架
UI(User Interface)框架是前端开发中十分重要的一部分,它提供了各种组件和样式,用于构建页面和用户界面。在前端开发中,封装库/工具库可以帮助我们更加高效地使用 UI 框架。
194 0
|
Ruby
《Cucumber:行为驱动开发指南》——2.3 创建步骤定义
现在在fetures/step_definitions目录下创建一个名为calculator_steps.rb的文件,只要这是一个Ruby文件,Cucumber并不介意你给这个文件起什么名字,但这里我们给这个文件起的名字其实不错。
2388 0
|
测试技术 C语言
《测试驱动的嵌入式C语言开发》——第2章测试驱动开发的工具和约定
本节书摘来自华章社区《测试驱动的嵌入式C语言开发》一书中的第2章测试驱动开发的工具和约定,作者:(美)James W. Grenning,更多章节内容可以访问云栖社区“华章社区”公众号查看
1123 0
|
Ruby
《Cucumber:行为驱动开发指南》——2.1 理解我们的目标
关于这个计算器的未来,我们有一个美好的愿景:一个能够在手机、桌面和浏览器上运行的云端服务,借助通用的数学操作符“团结”整个世界。不过等等,我们是务实的业务人员,因此这个程序的第一个版本应该尽可能简单。第一个版本将是一个用Ruby脚本实现的命令行程序。
1523 0
《Cucumber:行为驱动开发指南》——1.3 活的文档
Cucumber测试同传统的规格说明文档一样能被利益相关人阅读和编写,然而其独特的优点在于,你可以在任何时刻给他们一台计算机让测试执行,结果会告诉你测试有多准确。在实际情况中,这意味着你的文档不再是一种写完后就慢慢过期的东西,而成为一种能随时反映项目真实状态的活的东西。
1570 0
下一篇
无影云桌面