Specflow 如何处理多个参数?

mos*_*aad 3 c# parameters bdd specflow

正如标题所说,specflow 如何处理这个问题

x = AddUp(2, 3)
x = AddUp(5, 7, 8, 2)
x = AddUp(43, 545, 23, 656, 23, 64, 234, 44)
Run Code Online (Sandbox Code Playgroud)

我给出的链接是通常的做法。我想知道的是顶部的注释应该是什么?

[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;
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*der 5

我不相信您可以拥有一个使用 param 数组作为specflow 中的参数类型的绑定并自动使用它。至少我从来没有使用过,也从未见过有人使用过。

您希望如何在功能文件中指定这一点?您已经给出了要调用的方法以及希望 Specflow 调用的步骤定义方法的示例,但没有给出您期望功能文件如何读取的示例。

我怀疑你会想做这样的事情

Given I want to add up the numbers 2,5,85,6,78
Run Code Online (Sandbox Code Playgroud)

最终,specflow 会将其转换为字符串并调用方法。您必须自己进行从字符串到数字数组的转换,可能使用[StepArgumentTransformation]如下所示:

[StepArgumentTransformation]
public int[] ConvertToIntArray(string argument)
{
    argument.Split(",").Select(x=>Convert.ToInt32(x)).ToArray();
} 
Run Code Online (Sandbox Code Playgroud)

然后您应该能够像这样定义您的步骤定义:

[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;
}
Run Code Online (Sandbox Code Playgroud)

但说实话,此时你不需要这个 params位,int[]就足够了。