在SpecFlow中使用场景大纲,例如。
Scenario Outline: Invalid Login Details
Given some pre-conditions...
When user "Larry" enters username <username> and password <password>
Then the message "Invalid Login Details" should be displayed
Examples:
|username|password|
|larry06 | |
|larry06 |^&*%*^$ |
|%^&&** |pass123 |
| |pass123 |
我预计“何时”步骤将被评估为:
public void WhenUserEntersUsernameAndPassword(String username, String password){}
并且该场景将运行4次-对于表的每一行,根据需要传递值。事实并非如此。
相反,SpecFlow创建了4个所需步骤定义中的1个:
[When(@"""(.*)"" provides the following new username larry(.*) and password ")]
public void WhenUserEntersUsernameLarryAndPassword(string p0, int p1)
{
//TODO
}
为了让剩下的3个“工作”,我需要手动编写显式匹配表中其他值的方法。
从那以后,我意识到我可以说:
When "Larry" enters username "<username>" and password "<password>"
我得到:
[When(@"""(.*)"" provides the following ""(.*)"" and ""(.*)""")]
public void WhenUserEntersUsernameAndPassword(string p0, string name, string pass)
{
//TODO
}
完美。
但是所有的留档似乎都表明我不需要“”,这应该行得通(例如https://github.com/cucumber/cucumber/wiki/Scenario-outlines)。我注意到:
"您的步骤定义永远不必匹配占位符。它们需要匹配将替换占位符的值"
我只是没有真正看到为表的每一行编写单独的步骤定义的价值。
这种细微差别是SpecFlow特有的吗?
When "Larry" enters username <username> and password <password>
将匹配
[When(@"""(.*)"" enters username (.*) and password (.*)")]
public void WhenEntersUsernameAndPassword(string p0, string name, string pass)
{
//TODO
}
所以留档没问题。
您遇到的问题是,步骤文本的自动生成无法预测在没有"…"
的情况下插入什么正则表达式-我想它必须用作传递可互换字符串的指示符-可与 "(.*)", 匹配,但如果您不想要引号,您仍然可以手动更正它。