在具有两个不同参数的行上找到多个Match绑定

本文关键字:绑定 Match 参数 两个 | 更新日期: 2023-09-27 18:28:32

我在同一个功能文件中写了两行(When's)

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 }

但是,它显示了一个错误,即"找到多个匹配绑定。导航到第一个匹配…"

当我试图导航到第1行时,它的给出错误。。。但当我使用第二行"当"导航时。它导航正常。

我在应该有"<"answers">"的地方使用了"$"。

在具有两个不同参数的行上找到多个Match绑定

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

with (.*) in (.*)

匹配这两条线

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

在第一个例子中,它会选择"鹧鸪"answers"梨树"作为两个论点。在第二篇中,它将选择"圣诞鹧鸪"answers"梨树"作为论据。由于您的第一个正则表达式也与第二行匹配,因此它确实在查找多个绑定。

您可以使用不同的正则表达式。例如,如果您想挑出一个完整的单词,并且不包含任何空格,请尝试('S*)而不是(.*).匹配任何内容,包括空格。有关regex的更多信息,请点击此处。

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

def()-Steps的Regex也捕获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 }

这应该能解决你的问题。