【问题标题】:Specflow feature files - Possible to have multi line exampleSpecflow 功能文件 - 可能有多行示例
【发布时间】:2017-04-19 09:58:45
【问题描述】:

我想知道在场景大纲中是否可以为参数名称设置一个新行 例如

  Scenario Outline: Login
        Given <I> <am> <on> <the> <Office> <Portal> <link>
        When I have entered my CRM credentials and sign in
        Then I will be logged in
        Examples: 
        |I   |am   | on| the | //newline
        |data|data |data|data|
        |Office |Portal |link|
        |data|data |data|data|

我认为不会,因为我不确定它如何区分这两条线。我需要这个的原因是用于具有大量参数(例如 25 个参数)的冗长场景。

【问题讨论】:

    标签: c# specflow feature-file


    【解决方案1】:

    这是不可能的。

    文档。在Cucumber 规范中规定,示例部分应该是一个带有单个标题行的表格,所有其他行都带有数据:

    表格必须有一个标题行对应于 场景大纲步骤。

    每一行下面的行都会创建一个新的场景,填写 变量值。

    技术部分。 Specflow 使用 Gherkin 语言解析器将特征文件解析为 AST(抽象语法树)。此解析器逐行读取输入文件行并为每一行生成标记。来自TokenScanner源代码:

    扫描仪读取小黄瓜文档(通常从 .feature 文件中读取) 并为每一行创建一个标记。令牌被传递给 解析器,它输出一个 AST(抽象语法树)。

    Parser 然后一一读取标记并确定该标记与哪种类型的 line 相关。当它找到示例行时,它会查找单个标题行 (Examples_Definition),后跟示例。如果你会做这样的事情

        |I      |am     | on   | the |
        |data   |data   |data  |data |
        |Office |Portal |link  |
        |data   |data   |data  |
    

    那么第三行将被视为单元格数不正确的示例行。

    实际上解析器如何能够理解您是否有简单的数据行或标题行?所有示例数据都表示为字符串。 Aand OfficeI 列的完全有效值。好的,在这个特定的示例中,您在底部表格定义部分中有 3 列。但是如果也有四列呢?

        |I      |am     | on   | the |
        |data   |data   |data  |data |
        |Office |Portal |link  | foo |
        |data   |data   |data  |data |
    

    无法为解析器定义第二个标题行。

    可读性。坦率地说,这样的多行表对人们来说是不可读的。很难将示例表底部和顶部的第三个场景大纲部分关联起来。但可读性是 gherkin 和 Specflow 的主要特点。如果您必须为场景提供如此多的参数,请考虑重新设计测试。

    【讨论】:

      【解决方案2】:

      Gherkin(用于编写场景的语言)无法提供示例的多行参数。 示例部分中的每一行都是一个单独的场景/测试。

      如果您有这么多参数,最佳做法是将场景大纲拆分为多个大纲并使用默认值。

      【讨论】:

        猜你喜欢
        • 2017-02-15
        • 1970-01-01
        • 2013-08-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-27
        • 1970-01-01
        • 1970-01-01
        • 2011-06-17
        相关资源
        最近更新 更多