4

我在同一个功能文件中写了两行(何时)

When user $action1$ $key1$ with $value1$ for $atttributeType_Value$ in $Filename1_SectionId1$
Then abc
When user $action2$ $key2$ with $value2$ in $Filename2_SectionId2$
Then def

以及步骤定义文件中对应的步骤定义

作为

[When(@"user (.*) (.*) with (.*) for (.*) in (.*)")]
public void abc()
{   //operation }

[When(@"user (.*) (.*) with (.*) in (.*)")]
public void def()
{   //operation }

但是,它显示错误为“找到多个匹配绑定。导航到第一个匹配..”

当我尝试导航到第一行时,它给出错误......但是当我使用第二行时导航。它正在正确导航。

我在应该有“<”和“>”的地方使用了“$”。

4

2 回答 2

8

问题是您的第二个正则表达式:

with (.*) in (.*)

匹配这两条线

with a partridge in a pear tree
with a partridge for Christmas in a pear tree

在第一个实例中,它将选择“partridge”和“a pear tree”作为两个参数。第二,它会选择“圣诞鹧鸪”和“梨树”作为论据。由于您的第一个正则表达式也与第二行匹配,因此它确实找到了多个绑定。

您可以使用不同的正则表达式。例如,如果您想选择一个完整的单词并且不包含任何空格,请尝试(\S*)使用(.*). 匹配任何内容,.包括空格。更多关于正则表达式的信息

于 2016-01-01T15:08:22.917 回答
0

AFAIK Visual Studio 集成跳转到它找到的第一步定义。

def()- Steps 的正则表达式也捕获了 abc- Step 的情况。您是否尝试将参数放在单引号内?

像那样:

特征:

When user '$action1$' '$key1$' with '$value1$' for '$atttributeType_Value$' in   '$Filename1_SectionId1$'
Then abc
When user '$action2$' '$key2$' with '$value2$' in '$Filename2_SectionId2$'
Then def

步骤绑定:

[When(@"user '(.*)' '(.*)' with '(.*)' for '(.*)' in '(.*)'")]
public void abc()
{   //operation }

[When(@"user '(.*)' '(.*)' with '(.*)' in '(.*)'")]
public void def()
{   //operation }

那应该可以解决您的问题。

于 2015-12-31T14:49:39.057 回答