specflow如何处理多个参数?

时间:2015-08-03 13:52:43

标签: c# parameters bdd specflow

正如标题所说,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;
}

3 个答案:

答案 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
}