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

相关文章
|
存储 监控 OLAP
【ClickHouse 技术系列】- 在 ClickHouse 物化视图中使用 Join
本文翻译自 Altinity 针对 ClickHouse 的系列技术文章。面向联机分析处理(OLAP)的开源分析引擎 ClickHouse,因其优良的查询性能,PB级的数据规模,简单的架构,被国内外公司广泛采用。本系列技术文章,将详细展开介绍 ClickHouse。
【ClickHouse 技术系列】- 在 ClickHouse 物化视图中使用 Join
|
9月前
|
存储 监控 druid
Druid、ClickHouse、Doris、StarRocks 的区别与分析
本文对比了 Druid、ClickHouse、Doris 和 StarRocks 四款大数据分析引擎。它们均为 OLAP 引擎,采用列式存储和分布式架构,适用于海量数据分析。Druid 擅长实时分析与高并发查询;ClickHouse 以超高性能著称,适合复杂查询;Doris 提供易用的 SQL 接口,性能均衡;StarRocks 则以其极速查询和实时更新能力脱颖而出。各引擎在数据模型、查询性能、数据更新和存储方面存在差异,适用于不同的业务场景。选择时需根据具体需求综合考虑。
3934 20
|
存储 监控 Cloud Native
ClickHouse物化视图里常见的7个坑,你踩过几个?
在 OLAP 的业务场景中,不仅要把数据存起来,还需要把数据处理好。在 ClickHouse 中,为了提高数据处理性能,使用 Materialized View 是有效的方法之一。本文主要探讨 Materialized View(下文称 MV) 的工作原理与最佳实践,并介绍了使用过程中容易踩坑的一些问题和解决方案。
1427 5
|
并行计算 监控 Shell
openwrt编译模块demo练习
openwrt编译模块demo练习
314 0
Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required
Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required
782 0
|
JSON fastjson 数据格式
利用fastjson对json转map的操作
String str = "{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}"; //第一种方式 Map maps = (Map)JSON.
12654 1
|
Ubuntu Linux C语言
Linux下 tar命令(工具)的移植,源码下载、详细移植步骤
Linux下 tar命令(工具)的移植,源码下载、详细移植步骤
875 0
Linux下 tar命令(工具)的移植,源码下载、详细移植步骤
|
存储 Kubernetes 容灾
技术揭秘:从双11看实时数仓Hologres高可用设计与实践
本文将会从阿里巴巴双11场景出发,分析实时数仓面临的高可用挑战以及针对性设计。
4812 3
技术揭秘:从双11看实时数仓Hologres高可用设计与实践
|
测试技术 Android开发
Junit - 忽略测试(Ignore Test)
Junit - 忽略测试(Ignore Test)
855 0
Junit - 忽略测试(Ignore Test)
|
存储 SQL 缓存
Hologres揭秘:深度解析高效率分布式查询引擎
从阿里集团诞生到云上商业化,随着业务的发展和技术的演进,Hologres也在持续不断优化核心技术竞争力,为了让大家更加了解Hologres,我们计划持续推出Hologers底层技术原理揭秘系列,从高性能存储引擎到高效率查询引擎,高吞吐写入到高QPS查询等,全方位解读Hologers,请大家持续关注!
12273 4
Hologres揭秘:深度解析高效率分布式查询引擎