SpecFlow错误地将标识符与数字映射

时间:2017-03-16 15:48:07

标签: unit-testing specflow

我正在使用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一个单词末尾的数字不是参数值吗?

2 个答案:

答案 0 :(得分:1)

解释,你的步骤

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

将导致Regex返回由()标记的组。这个组是传递给步骤绑定的args的内容。

然而是正则表达式

"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
    2.   
  2.         

    用于程序的字符串文字:

         

    C#

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

答案 1 :(得分:0)

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

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