我正在使用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一个单词末尾的数字不是参数值吗?
答案 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个匹配项:
- 醇>
I am a valid System33 user logged in the system
有1个组:
- System33
用于程序的字符串文字:
C#
@"I am a valid (System.*) user logged in the system"
答案 1 :(得分:0)
代码由框架代码生成器生成,该代码生成器是Specflow VS Integration的一部分。它试图猜测步骤中的参数是什么,并且由于大多数时间数字是步骤中的参数,我们总是将数字视为参数。
您无法配置生成器的行为,只需更改字符串即可。这是一个正则表达式,可以更改为您想要的。生成器只为您生成建议和起点。