2013-11-16 7 views
2

Я имею следующие два определения шага:Неоднозначные определения шага

[When(@"I Schedule a Start Now Event named ""(.*)"" for the DR program named ""(.*)""")] 

[When(@"I Schedule a Start Now Event named ""(.*)"" for the DR program named ""(.*)"" with load control device ""(.*)""")] 

При использовании приведенных выше двух определений шага в сценарии, я мог видеть, второе определение шага не в состоянии связать.

Это потому, что, когда я закомментирована второго определения шага, мой шаг ставки на первом этапе определения следующим образом:

When I Schedule a Start Now Event named "[email protected]+Event" for the DR program named "[email protected]=Program" with load control device "Light" 

Термин "[email protected]=Program" with load control device "Light" предполагается в качестве одного значения строки. Но этого не должно было быть.

Он должен связываться со вторым определением шага.

Это проблема с шаблоном Regex?

ответ

0

кажется мне, как вам нужно быть более конкретным:

[When(@"I Schedule a Start Now Event named ""([^""]*)"" for the DR program named ""([^""]*)""")] 

[When(@"I Schedule a Start Now Event named ""([^""]*)"" for the DR program named ""([^""]*)"" with load control device ""([^""]*)""")] 

Заставить * неохотой бы, вероятно, точно так же:

[When(@"I Schedule a Start Now Event named ""(.*?)"" for the DR program named ""(.*?)""")] 

[When(@"I Schedule a Start Now Event named ""(.*?)"" for the DR program named ""(.*?)"" with load control device ""(.*?)""")] 

... но инвертированный символьный класс более несложный. Отказ: я не являюсь пользователем SpecFlow, но this blog post, похоже, подтверждает мои предположения.

1

Его проблема с шаблоном регулярного выражения, но и довольно распространенная проблема.

В основном regex .* известен как жадный. Он будет соответствовать всему, что может, от того, где он появляется, пока что-то не заставит его не соответствовать. Предложение Алана Мура использовать цитаты будет работать довольно хорошо. Другим является использование имен, которые не содержат пробелов, тогда вы можете использовать [^ ]*, что означает совпадение многих не пробелов.

Я бы предположил, что вам легче будет создавать ваши запросы с помощью небольших операторов. Например

Given a DR program called xxx 
And a load control device xxx 
When I schedule a Start now event named xxx 

private string drProgramName; 
private string loadControlDevice; 

[Given("a DR program called (.*)"] 
public void GivenADRProgramCalled(string name) 
{ 
    drProgamName = name; 
} 

[Given("a load control device (.*)"] 
public void GivenALoadControlDevice(string name) 
{ 
    loadControlDevice = name; 
} 

[When("I schedule a start now event named (.*)")] 
public void WhenIScheduleAStartNowEventNamed(string name) 
{ 
    WhenIScheduleAStartNowEventNamed(name, drProgamName, loadControlDevice); 
} 
0

Это сообщение Blog действительно решило мою проблему. Приветствую Алана!

Смежные вопросы