Specflow功能文件 - 可能有多行示例

时间:2017-04-19 09:58:46

标签: c# specflow feature-file

我想知道在Scenario Outline中是否可以为参数名称添加新行 e.g。

  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个参数)。

2 个答案:

答案 0 :(得分:3)

这是不可能的。

<强>文档即可。在Cucumber规范中声明,示例部分应该是具有单个标题行的表和具有数据的所有其他行:

  

该表必须有一个与该变量对应的标题行   场景大纲步骤。

     

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

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

  

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

Parser然后逐个读取令牌并确定此令牌与哪种相关。当找到示例行时,它会查找单个标题行(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 |

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

<强> Readabiltiy 即可。坦率地说,这样的多线表对人们来说是不可读的。从示例表的底部和顶部关联第三个场景轮廓部分将非常困难。但可读性是小黄瓜和Specflow的主要特征。如果必须为场景提供如此多的参数,请考虑重新设计测试。

答案 1 :(得分:0)

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

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