Двусмысленные определения шагов
У меня следующие два шага:
[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 "~@+Event" for the DR program named "~@=Program" with load control device "Light"
Семестр "~@=Program" with load control device "Light"
предполагается как одно строковое значение. Но так не должно быть.
Следует связать с определением второго шага.
Это проблема с шаблонами Regex?
3 ответа
Похоже, мне нужно быть более конкретным:
[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, но этот пост в блоге, кажется, подтверждает мои предположения.
Это проблема с регулярным выражением, но также довольно распространенная проблема.
В основном регулярное выражение .*
известен как жадный. Он будет соответствовать всему, что может, от того, где он появляется, пока что-то не заставит его не совпадать. Предложение Алана Мура использовать кавычки будет работать очень хорошо. Другой - использовать имена, которые не содержат пробелов, тогда вы можете использовать [^ ]*
смысл совпадения многих не пробелов.
Я бы на самом деле предположил, что вам, возможно, будет проще строить ваши запросы с помощью небольших заявлений. Например
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);
}