SpecFlow - 小Cucumber关键词


小Cucumber的主要关键字是 -

  • 特征
  • 设想
  • 规则(直到小Cucumber 6)
  • 示例或场景
  • 背景
  • 场景概要
  • 例子
  • | 对于数据表
  • """ 表示文档字符串
  • @代表标签
  • # 评论
  • 给定
  • 什么时候
  • 然后

Gherkin 使用多种语言的本地化,上述每个关键字在各自的语言中都有其等效术语。

让我们探讨一些重要的 Gherkin 关键字 -

特征

添加一个功能是为了对应用程序的功能进行总体描述并俱乐部连接的场景。这是 Gherkin 文档中最重要的关键字。

功能后跟一个冒号:符号,然后是对该功能的简短描述。我们可以添加多行以进行更多描述。SpecFlow 在执行时不会考虑这些,但会添加到 html 报告中。

冒号

一旦功能的描述完成,我们应该开始一个新行,其中包含关键字“背景”、“示例”等。我们可以在Feature之上添加标签来聚集相似的特征,而不管文件或目录的结构如何。

标签

标签是添加到场景或功能的标记。为功能添加标签就像将该标签标记到该功能文件中的每个场景一样。@ 符号后面提到了标签名称。

我们可以过滤和俱乐部要使用标签运行的测试。例如,我们可以使用@important标记紧急测试并经常运行它。SpecFlow 将@ignore标签视为重要标签,并从带有此标签的场景中生成一个被忽略的单元测试方法。

标签

这里,功能文件包含两个带有@Calculator标签的场景。同样的情况也应反映在测试资源管理器中,以挑选要运行的测试。

计算器标签

设想

场景是描述业务逻辑的完整实例。它有多个步骤。它通常被认为是关键字Example的同义词。场景没有固定的步骤数。但建议每个场景有 3 到 5 个步骤。

如果步骤太多,可能会失去作为规范和文档的价值。场景就像开发生命周期中的测试。此外,它可以分为前提条件、测试步骤和验证。

设想

给定

给出了用于描述系统预先存在的状况的步骤。它通常涉及过去发生的事件。当执行给定步骤时,它将设置对象、测试数据库中的数据并使系统处于适当的状态。

因此,给定步骤有助于在用户与系统交互之前在已知条件下定义系统。我们可以有多个给定步骤。两个或多个给定步骤可以与And关键字一起使用。简而言之,它用于定义前提条件。

给定

什么时候

何时是用于描述操作或事件的步骤。这可能是人与系统的交互,也可能是另一个系统引起的事件。在场景中使用单个 When 步骤是一种很好的做法。

如果我们被迫有多个 When 步骤,理想情况下我们应该将场景分成更小的场景。

什么时候

然后

然后是用于描述预期结果的步骤。Then 步骤的相应步骤定义应该有一个断言,用于根据预期结果验证实际结果。

因此,它基本上处理从测试中获得的输出(消息、报告等​​),而不是系统的内部特征,例如数据库记录。换句话说,它用于从最终用户的角度来看明显的结果。

然后

但是,并且

如果我们重复了“Given”、“When”和“Then”步骤,那么我们可以通过用“And”、“But”步骤替换连续的“Given”、“When”、“Then”步骤来使场景更有条理。

但是并且

上面的例子展示了And和But的用法。

* 符号

* 符号用于代替另一个步骤关键字。这可用于表示项目列表的步骤。它更像是一个要点。对于下面的示例,两个 And 步骤相继出现。

象征

连续的 And 步骤应该这样表示 -

符号

背景

有时,我们可能需要对功能文件中的所有场景重复相同的步骤。我们可以通过将这些步骤放在背景部分下将它们转移到背景中。

它有助于向场景添加上下文。它可以有多个给定步骤。因此,它应在每个场景的执行之前执行,但发布任何Before 挂钩

背景保留在第一个示例场景之前,处于类似的缩进级别。简而言之,Background 用于声明所有测试的通用步骤。

背景

在上面的示例中,有两个场景,后台步骤应在执行每个场景之前运行一次。

场景概要

场景大纲用于使用不同的数据集复制相同的场景。使用不同的值编写相同的测试既麻烦又耗时。例如,

应用场景

我们可以将上述两个场景与场景大纲结合起来。

场景概要

因此,我们看到场景大纲应该附带关键字Examples。对于示例段下方出现的每一行,都会执行一次场景大纲。

此外,我们还看到给定步骤具有<>分隔符。它指向示例表的标题。在执行将步骤与步骤定义匹配的任务之前,SpecFlow 应将值放入此表中。

数据表

数据表用于将一组值以列表的形式发送到步骤定义文件。它对于处理大型数据集很有用。SpecFlow 在步骤定义文件中具有丰富的用于表操作的 API。

SpecFlow Assist Helpers包用于在表上工作。另外,我们必须将命名空间TechTalk.SpecFlow.Assist添加到我们的代码中。

数据表