0

在 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?

4

1 回答 1

2
When "Larry" enters username <username> and password <password>

将匹配

[When(@"""(.*)"" enters username (.*) and password (.*)")]
public void WhenEntersUsernameAndPassword(string p0, string name, string pass)
{
//TODO
}

所以文档很好。

您遇到的问题是,步骤文本的自动生成无法预测要插入哪些正则表达式"..."- 我猜它必须用作您正在传递可互换字符串的指示符 - 可与“(。*)”匹配,但是如果您不想要引号,您仍然可以手动更正它就好了。

于 2012-10-09T16:09:27.573 回答