Обнаружено несколько сопоставлений совпадений с двумя разными параметрами

Я написал две строки (когда) в моем файле

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-й строке, это дает ошибку... Но когда я перемещаюсь, используя вторую строку Когда. это навигация правильно.

Я использовал "$" там, где должны быть "<" и ">".

2 ответа

Решение

Проблема в том, что ваш второй регулярное выражение:

with (.*) in (.*)

соответствует обеим этим строкам

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

В первом случае он выберет "куропатку" и "грушевое дерево" в качестве двух аргументов. Во втором случае в качестве аргументов он выберет "куропатку на Рождество" и "грушевое дерево". Поскольку ваше первое регулярное выражение также соответствует этой второй строке, оно действительно находит несколько привязок.

Вы можете использовать другое регулярное выражение. Например, если вы хотите выделить целое слово и не включать пробелы, попробуйте (\S*) вместо (.*), Тот . соответствует чему угодно, включая пробелы. Подробнее о регулярных выражениях здесь.

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 }

Это должно исправить вашу проблему.

Другие вопросы по тегам