行为驱动开发 - SpecFlow



SpecFlow 是一个开源项目。源代码托管在 GitHub 上。SpecFlow 使用的特性文件用于存储应用程序中特性(用例、用户故事)的验收标准,这些标准使用 Gherkin 语法定义。

Gherkin 格式由 Cucumber 引入,也用于其他工具。Gherkin 语言作为 GitHub 上的一个项目维护着 − https://github.com/cucumber/gherkin

特性元素和 SpecFlow

特性元素的关键特性是:

  • 特性元素为特性文件提供标题。特性元素包括应用程序中相应特性的名称和高级描述。

    • SpecFlow 为特性元素生成一个单元测试类,类名从特性的名称派生。

    • SpecFlow 从代表验收标准的场景生成可执行的单元测试。

  • 一个特性文件可能包含多个场景,用于描述特性的验收测试。

    • 场景有名称,可以包含多个场景步骤。

    • SpecFlow 为每个场景生成一个单元测试方法,方法名从场景的名称派生。

多个场景步骤

场景可以有多个场景步骤。有三种类型的步骤定义了前提条件、操作或验证步骤,这些步骤构成了验收测试。

  • 不同的步骤类型分别以Given、WhenThen关键字开头,相同类型的后续步骤可以使用AndBut关键字链接。

  • Gherkin 语法允许这三种步骤类型的任何组合,但场景通常具有Given、WhenThen语句的不同块。

  • 场景步骤使用文本定义,并且可以具有称为 DataTable 的附加表或称为 DocString 的多行文本参数。

  • 场景步骤是执行任何自定义代码来自动化应用程序的主要方式。

  • SpecFlow 为每个场景步骤在单元测试方法内生成一个调用。该调用由 SpecFlow 运行时执行,该运行时将执行与场景步骤匹配的步骤定义。

  • 匹配在运行时完成,因此即使尚未实现绑定,也可以编译和执行生成的测试。

  • 您可以在场景步骤中包含表格和多行参数。这些参数由步骤定义使用,并作为附加表格或字符串参数传递。

标签

标签是可以分配给特性和场景的标记。将标签分配给特性等同于将标签分配给特性文件中的所有场景。以@开头的标签名称表示标签。

  • 如果单元测试框架支持,SpecFlow 会从标签生成类别。

  • 生成的类别名称与标签名称相同,但不包括前导@。

  • 您可以使用这些单元测试类别来过滤和分组要执行的测试。例如,您可以用@important标记关键测试,然后更频繁地执行这些测试。

背景元素

背景语言元素允许为特性文件中的所有场景指定一个共同的前提条件。

  • 文件的背景部分可以包含一个或多个场景步骤,这些步骤在任何其他场景步骤之前执行。

  • SpecFlow 从背景元素生成一个方法,该方法从为场景生成的全部单元测试中调用。

场景大纲

场景大纲可用于定义数据驱动的验收测试。场景大纲始终包含场景模板规范(使用 语法带有数据占位符的场景)和一组提供占位符值的示例。

  • 如果单元测试框架支持,SpecFlow 会从场景大纲生成基于行的测试。

  • 否则,它将为场景大纲生成一个参数化的单元测试逻辑方法,并为每个示例集生成一个单独的单元测试方法。

  • 为了更好的可追溯性,生成的单元测试方法名称是从场景大纲标题和示例的第一个值(示例表的第 一列)派生的。

  • 因此,最好选择一个唯一且具有描述性的参数作为示例集中的第一列。

  • 由于 Gherkin 语法确实要求所有示例列在场景大纲中具有匹配的占位符,因此您甚至可以在示例集中引入任意列,以便以更高的可读性来命名测试。

  • SpecFlow 在匹配步骤绑定之前,将占位符替换作为单独的阶段执行。

  • 因此,步骤绑定中的实现和参数与它们是通过直接场景还是场景大纲执行无关。

  • 这允许您稍后在验收测试中指定更多示例,而无需更改步骤绑定。

注释

您可以通过以 # 开头添加注释行到特性文件的任何位置。但是,请注意,规范中的注释可能表示验收标准指定错误。SpecFlow 会忽略注释行。

广告