.net 不明确的步骤定义
我有以下两个步骤的定义:.net 不明确的步骤定义,.net,regex,specflow,.net,Regex,Specflow,我有以下两个步骤的定义: [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 ""(.*)""")]
在场景中使用上述两个步骤定义时,我可以看到第二个步骤定义无法绑定
这是因为,当我注释掉第二个步骤定义时,我的步骤对第一个步骤定义的出价如下:
当我为名为“~@=program”且负载控制设备为“Light”的DR程序安排名为“~@+Event”的立即启动事件时
带有负载控制装置“灯”的术语“~@=程序”
假定为单字符串值。但不应该是这样
它应该与第二步定义绑定
这是一个正则表达式模式问题吗?在我看来,您需要更具体一些:
[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用户,但似乎证实了我的猜测。这是一个regex模式问题,但也是一个相当常见的问题 基本上,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);
}
这篇文章真的解决了我的问题。艾伦,干杯