- 行为驱动开发
- BDD - 首页
- BDD - 简介
- BDD - 测试驱动开发
- BDD - 以BDD的方式进行TDD
- BDD - 基于示例的规范
- BDD - 工具
- BDD - Cucumber
- BDD - Gherkin
- BDD - SpecFlow
- BDD 有用资源
- BDD - 快速指南
- BDD - 有用资源
- BDD - 讨论
行为驱动开发 - Gherkin
Gherkin 是一种语言,用于编写特性、场景和步骤。Gherkin 的目的是帮助我们编写具体的需求。
要理解我们所说的具体需求是什么意思,请考虑以下示例 -
应阻止客户输入无效的信用卡信息。
如果客户输入的信用卡号码长度不正好为 16 位,当他们尝试提交表单时,表单应重新显示并显示一条错误消息,告知他们正确的位数。
后者没有歧义,避免了错误,并且更易于测试。
Gherkin 旨在创建更具体的需求。在 Gherkin 中,上面的示例如下所示 -
特性
输入无效信用卡信息时的反馈 特性定义
在用户测试中,我们看到许多人犯了错误 文档
背景适用于以下所有场景
假设我选择了一件要购买的商品,
并且我即将输入我的信用卡号码
场景 - 信用卡号码太短场景定义
当我输入一个少于 16 位的卡号
并且所有其他详细信息都正确
并且我提交表单步骤
那么表单应重新显示
并且我应该看到一条消息,告知我正确的位数
Gherkin 格式和语法
Gherkin 文件是纯文本文件,扩展名为 .feature。每个非空行必须以 Gherkin 关键字开头,后跟任意文本。关键字如下 -
特性
场景
假设、当、那么、并且、但是(步骤)
背景
场景大纲
示例
"""(文档字符串)
|(数据表)
@(标签)
#(注释)
*
特性
特性关键字用于描述软件特性,以及对相关场景进行分组。特性具有三个基本要素 -
关键字 – 特性。
特性的名称,在与特性关键字相同的行上提供。
可选的(但强烈推荐)描述,可以跨越多行,即包含特性关键字的行与以场景、背景或场景大纲开头的行之间的所有文本。
除了名称和描述之外,特性还包含场景或场景大纲列表,以及可选的背景。
通常,通过获取特性的名称,将其转换为小写并将空格替换为下划线来命名.feature文件。例如,
feedback_when_entering_invalid_credit_card_details.feature
为了识别系统中的特性,您可以使用所谓的“特性注入模板”。
描述
Gherkin 文档的某些部分不必以关键字开头。
在特性、场景、场景大纲或示例后面的行中,您可以编写任何内容,只要没有行以关键字开头即可。这是包含描述的方式。
场景
要表达系统的行为,您需要将一个或多个场景附加到每个特性上。通常每个特性有 5 到 20 个场景来完整地指定该特性的所有行为。
场景遵循以下模式 -
描述初始上下文
描述事件
描述预期结果
我们从上下文开始,描述一个动作,并检查结果。这是通过步骤完成的。Gherkin 提供三个关键字来描述每个上下文、动作和结果作为步骤。
假设 - 建立上下文
当 - 执行操作
那么 - 检查结果
这些关键字提高了场景的可读性。
示例
场景 - 从账户中取款。
假设我的账户中有 100 美元。
当我请求 20 美元。
那么应发出 20 美元。
如果在彼此下方的多个假设或当步骤,可以使用并且或但是。它们允许您详细指定场景。
示例
场景 - 使用被盗卡尝试取款。
假设我的账户中有 100 美元。
但是我的卡无效。
当我请求 50 美元。
那么我的卡不应该退回。
并且我应该被告知联系银行。
在创建场景时,请记住“每个场景都必须有意义并且能够独立于任何其他场景执行”。这意味着 -
您不能使一个场景的成功条件依赖于之前执行的其他某些场景。
每个场景都创建其特定的上下文,执行一项操作,并测试结果。
此类场景提供以下好处 -
测试将更简单且更容易理解。
您可以只运行测试集的一部分,而不必担心测试集的破坏。
根据您的系统,您可能能够并行运行测试,从而减少执行所有测试所需的时间。
场景大纲
如果您必须编写具有多个输入或输出的场景,您最终可能会创建几个仅值不同的场景。解决方案是使用场景大纲。要编写场景大纲,
场景大纲步骤中的变量用<和>标记。
变量的各种值作为表中的示例给出。
示例
假设您正在为计算器上的两个数字相加编写一个特性。
特性 - 加法。
Scenario Outline: Add two numbers. Given the input "<input>" When the calculator is run Then the output should be <output>" Examples | input | output | | 2+2 | 4 | | 98+1 | 99 | | 255+390 | 645 |
场景大纲部分之后始终是一个或多个示例部分,它们是表的容器。表必须具有一个标题行,对应于场景大纲步骤中的变量。下面的每一行都将创建一个新场景,填充变量值