如何在C#中传递Specflow中的可选参数

时间:2018-04-03 17:08:17

标签: c# selenium-webdriver specflow gherkin

我在功能文件中有以下步骤

When I add employee with vendor 'vendorname'
And I add employee with vendor 'vendorname' and client 'clientname'

我希望在单步定义中执行这两个步骤,其中客户端名称可以是可选的。 我可以使用两步定义来实现这一点,但它会复制代码。

4 个答案:

答案 0 :(得分:0)

所以你想写这样的东西

When I add an employee with the following information
| vendor     | client     |
| vendorname | clientname |

这将使用Table参数生成步骤定义。

您可以自己旋转表或使用表CreateInstance,CreateInstance<>,CreateSet,CreateSet<>表的帮助函数将表映射到测试中的对象。

答案 1 :(得分:0)

SpecFlow不支持可选参数 你需要单独的步骤。

但我们欢迎PR:https://github.com/techtalk/SpecFlow/issues/316

答案 2 :(得分:0)

嗯,我想你可以做一些事情,这取决于你想要达到的目标或者你希望代码的样子。现在我想到了一件事。

例如,而不是:

When I add employee with vendor 'vendorname'
And I add employee with vendor 'vendorname' and client 'clientname'

你可以写下:

When I add employee with vendor 'vendorname' and client 'clientname'

或者,应用与Fran提出的相同:

When I add an employee with the following information
| vendor     | client     |
| vendorname | clientname |

然后,当您在.feature文件中的步骤中设置输入参数时,您可以选择要在步骤定义文件中查询的任何预定义字符串或值(使用if或switch语句)。

答案 3 :(得分:0)

在行尾只能有一个可选参数。使用非捕获组

[When(@"I add employee with vendor '(.*)'(?: and client '(.*))'")]
public void IAddEmptoyee(string vendorName, string clientName = null)
{
}