zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

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

驱动开发 一个 指南 创建 特性 2.2 行为
2023-09-11 14:17:37 时间

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

2.2 创建一个特性

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

$ mkdir calculator

$ cd calculator

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

$ cucumber

You dont 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

When /^the calculator is run$/ do

 pending # express the regexp above with the code you wish you had

Then /^the output should be "([^"]*)"$/ do |arg1|

 pending # express the regexp above with the code you wish you had

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)的了。


如何利用 xUnit 框架对测试用例进行维护? 先看 Wikipedia 上的解释: xUnit 是一系列测试框架的统称,最开始来源于一个叫做 Smalltalk 的 SUnit 框架,现在各种面向对象的语言,如 Java、Python 的鼻祖就是 Smalltalk,后来这些语言都借助了 Sunit 框架的理念,有很多通用的规范和特征,也就统称为 xUnit。 - Java : JUnit、TestNG - Python : UnitTes
《测试驱动的嵌入式C语言开发》——3.7节测试驱动开发者的状态机 本节书摘来自华章社区《测试驱动的嵌入式C语言开发》一书中的第3章,第3.7节测试驱动开发者的状态机,作者:(美)James W. Grenning,更多章节内容可以访问云栖社区“华章社区”公众号查看
《测试驱动的嵌入式C语言开发》——第2章测试驱动开发的工具和约定 本节书摘来自华章社区《测试驱动的嵌入式C语言开发》一书中的第2章测试驱动开发的工具和约定,作者:(美)James W. Grenning,更多章节内容可以访问云栖社区“华章社区”公众号查看
《Cucumber:行为驱动开发指南》——2.1 理解我们的目标 关于这个计算器的未来,我们有一个美好的愿景:一个能够在手机、桌面和浏览器上运行的云端服务,借助通用的数学操作符“团结”整个世界。不过等等,我们是务实的业务人员,因此这个程序的第一个版本应该尽可能简单。第一个版本将是一个用Ruby脚本实现的命令行程序。
《Cucumber:行为驱动开发指南》——2.3 创建步骤定义 现在在fetures/step_definitions目录下创建一个名为calculator_steps.rb的文件,只要这是一个Ruby文件,Cucumber并不介意你给这个文件起什么名字,但这里我们给这个文件起的名字其实不错。
《Cucumber:行为驱动开发指南》——6.3 照管好你的测试 自动化特性的好处在于你可以把它们作为活文档来长期信赖,因为你会将每一个场景都用于检查产品代码,以确保它们仍然有效。对于同代码打交道的程序员来说,这还有另一件好处:在他们开发系统的时候,那些测试可以充当安全网,对任何破坏已有行为的错误都给出警告。
《Cucumber:行为驱动开发指南》——1.3 活的文档 Cucumber测试同传统的规格说明文档一样能被利益相关人阅读和编写,然而其独特的优点在于,你可以在任何时刻给他们一台计算机让测试执行,结果会告诉你测试有多准确。在实际情况中,这意味着你的文档不再是一种写完后就慢慢过期的东西,而成为一种能随时反映项目真实状态的活的东西。
《Cucumber:行为驱动开发指南》——2.5 运行程序 这段代码试图运行我们的计算器程序calc.rb,同时传入上一个步骤保存下来的输入,并用另一个实例变量保存输出。接下来它检查一个名字很特别的(实际上是很隐晦的)Ruby变量$?,来核实命令是否成功运行了,如果运行失败则抛出一个错误。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。