- 行为驱动开发 (BDD)
- BDD - 首页
- BDD - 简介
- BDD - 测试驱动开发 (TDD)
- BDD - 基于BDD的TDD
- BDD - 基于示例的规范
- BDD - 工具
- BDD - Cucumber
- BDD - Gherkin
- BDD - SpecFlow
- BDD 有用资源
- BDD - 快速指南
- BDD - 有用资源
- BDD - 讨论
行为驱动开发 - Cucumber
Cucumber 是一款支持可执行规范、测试自动化和活文档的工具。
行为驱动开发扩展了基于示例的规范。它还规范了测试驱动开发的最佳实践,特别是从外向内的工作视角。开发工作基于可执行规范。
可执行规范的关键特性如下:
可执行规范是:
源于代表系统行为的示例。
由所有参与开发的人员(包括业务人员和利益相关者)共同编写。
基于验收标准。
基于可执行规范的验收测试是自动化的。
使用共享的、通用的语言来编写可执行规范和自动化测试,以便:
在整个开发过程中使用领域特定术语。
每个人,包括客户和利益相关者,都以相同的方式讨论系统、其需求和其实现。
在需求、设计文档、代码、测试等中使用相同的术语来讨论系统。
任何人都可以阅读和理解需求以及如何生成更多需求。
可以轻松适应变化。
维护活文档。
Cucumber 有助于此过程,因为它将可执行规范与系统的实际代码和自动化的验收测试联系起来。
它的设计实际上是为了让客户和开发人员一起工作。当验收测试通过时,这意味着它所代表的系统行为规范已正确实现。
典型的 Cucumber 验收测试
考虑以下示例。
特性 - 注册
注册应该快捷且友好。
场景 - 成功注册
新的用户应该收到确认邮件并收到个性化问候。
假设我已选择注册。
当我使用有效信息注册时。
那么我应该收到一封确认邮件。
并且我应该看到个性化的问候信息。
从这个例子中,我们可以看到:
验收测试指的是特性。
特性由场景解释。
场景由步骤组成。
规范以自然语言写在纯文本文件中,但它是可执行的。
Cucumber 的工作原理
Cucumber 是一款命令行工具,它处理包含特性的文本文件,查找可以针对您的系统执行的场景。让我们了解 Cucumber 的工作原理。
它利用了一些关于文件命名方式和文件位置(各个文件夹)的约定,以便于上手。
Cucumber 允许您将规范、自动化测试和文档保存在同一位置。
每个场景都是一系列步骤的列表,这些步骤描述了场景的前提条件、操作和后置条件;如果每个步骤执行都没有错误,则该场景被标记为通过。
运行结束时,Cucumber 将报告有多少场景通过。
如果某些内容失败,它会提供有关失败内容的信息,以便开发人员能够继续进行。
在 Cucumber 中,特性、场景和步骤是用名为Gherkin的语言编写的。
Gherkin 是具有结构的纯文本英语(或其他 60 多种语言)。Gherkin 易于学习,其结构允许您以简洁的方式编写示例。
Cucumber 执行包含用 Gherkin 编写的可执行规范的文件。
Cucumber 需要步骤定义来将纯文本 Gherkin 步骤转换为将与系统交互的操作。
当 Cucumber 执行场景中的步骤时,它将查找匹配的步骤定义来执行。
步骤定义是一小段代码,其中附加了一个模式。
该模式用于将步骤定义链接到所有匹配的步骤,而代码是 Cucumber 在看到 Gherkin 步骤时将执行的内容。
每个步骤都伴有一个步骤定义。
大多数步骤将收集输入,然后委托给特定于您的应用程序领域的框架,以便对您的框架进行调用。
Cucumber 支持十多种不同的软件平台。您可以选择适合您的 Cucumber 实现。每个 Cucumber 实现都提供相同的整体功能,并且它们也有自己的安装程序和特定于平台的功能。
映射步骤和步骤定义
Cucumber 的关键在于步骤和步骤定义之间的映射。
Cucumber 实现
以下是 Cucumber 的实现:
Ruby/JRuby | |
JRuby(使用 Cucumber-JVM) | |
Java | |
Groovy | |
.NET(使用 SpecFlow) | |
JavaScript | |
JavaScript(使用 Cucumber-JVM 和 Rhino) | |
Clojure | |
Gosu | |
Lua | |
PHP(使用 Behat) | |
Jython | |
C++ | |
Tcl |
框架集成
以下是框架实现: