正如标题所说,specflow如何处理this
x = AddUp(2, 3)
x = AddUp(5, 7, 8, 2)
x = AddUp(43, 545, 23, 656, 23, 64, 234, 44)
我给出的链接是通常如何完成的。 我想知道的是顶部的注释应该是什么?
[Then(@"What should I write here")]
public static void AddUp(params int[] values)
{
int sum = 0;
foreach (int value in values)
{
sum += value;
}
return sum;
}
答案 0 :(得分:3)
您可以通过添加单引号来添加参数,如下所示:
[When(@"I perform a simple search on '(.*)'")]
public void WhenIPerformASimpleSearchOn(string searchTerm)
{
var controller = new CatalogController();
actionResult = controller.Search(searchTerm);
}
您可以使用逗号分隔列表
When i login to a site
then 'Joe,Bloggs,Peter,Mr,Some street,15' are valid
您也可以使用表格值
When I login to a site
then the following values are valid
| FirstName | LastName | MiddleName | Greeting| Etc | Etc |
| Joe | Bloggs | Peter | Mr | you get| The Idea|
https://github.com/techtalk/SpecFlow/wiki/Step-Definitions Providing multiple When statements for SpecFlow Scenario Passing arrays of variable in specflow
答案 1 :(得分:2)
我不相信您可以使用param数组作为specflow中的参数类型并自动使用它。至少我从未使用过,从未见过用过的。
你想在功能文件中指定吗?您已经提供了要调用的方法的示例以及您希望specflow调用的步骤定义方法,但不是您希望如何读取要素文件。
我怀疑你会想要做这样的事情
Given I want to add up the numbers 2,5,85,6,78
最终specflow会将其转换为字符串并调用方法。您必须自己进行从字符串到数字数组的转换,可能使用这样的[StepArgumentTransformation]
:
public int[] ConvertToIntArray(string argument)
{
argument.Split(",").Select(x=>Convert.ToInt32(x)).ToArray();
}
然后您应该能够像这样定义您的setp定义:
[Given(@"I want to add up the numbers (.*)")]
public static void AddUp(params int[] values)
{
int sum = 0;
foreach (int value in values)
{
sum += value;
}
return sum;
}
但老实说,此时您不需要params
位,int[]
就够了。
答案 2 :(得分:0)
这是我认为最好的解决方案:
When I add the following numbers
| Numbers|
| 5 |
| 1 |
| 3 |
还有步骤
[When(@"I add the following numbers")]
public static void AddUp(Table values)
{
//addition code
}