【问题标题】:SpecFlow wrongly maps identifiers with a numberSpecFlow 错误地将标识符映射到一个数字
【发布时间】:2017-08-07 21:45:44
【问题描述】:

我正在使用 SpecFlow 进行测试,但遇到了这种烦人的情况:系统名称是 System33,每当我引用系统名称时,SpecFlow 都会尝试将“33”绑定为参数。例如:

Given I am a valid System33 user logged in the system 

绑定到这一步:

[Given(@"I am a valid System(.*) user logged in the system")]
public void GivenIAmAValidSystemUserLoggedInTheSystem(int p0)

这很烦人,因为我收到了另一个部门的规格,他们经常提到“System33”。

我试图找到一种方法来覆盖此标准行为,但坦率地说文档很差。

http://specflow.org/documentation/Using-Gherkin-Language-in-SpecFlow/

有人知道如何告诉 SpecFlow 单词末尾的数字不是参数值吗?

【问题讨论】:

    标签: unit-testing specflow


    【解决方案1】:

    代码由框架代码生成器生成,它是 Specflow VS 集成的一部分。它试图猜测步骤中的参数可能是什么,并且由于大多数时候数字是步骤中的参数,我们总是将数字视为参数。

    您不能配置生成器的行为,而只需更改字符串。这是一个正则表达式,可以更改为您想要的。生成器只会为您生成建议和起点。

    【讨论】:

      【解决方案2】:

      解释起来很简单,你的步骤

      [Given(@"I am a valid System(.*) user logged in the system")]
      

      将产生一个返回由() 标记的组的正则表达式。该组是传递给您的步骤绑定的参数的内容。

      然而

      的正则表达式
      "I am a valid (System.*) user logged in the system"
      

      将改为返回一个带有System33 的组。您可以使用正则表达式检查器来查看这一点,例如 http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

      Given I am a valid System33 user logged in the system 的来源和I am a valid (System.*) user logged in the system 的模式 给出

      的结果

      结果

      找到 1 个匹配项:

      1. I am a valid System33 user logged in the system 有 1 组:
        1. System33

      程序中使用的字符串字面量:

      C#

      @"I am a valid (System.*) user logged in the system"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-02
        • 1970-01-01
        • 2019-09-04
        • 2012-01-23
        • 2013-09-26
        • 1970-01-01
        • 1970-01-01
        • 2013-03-30
        相关资源
        最近更新 更多