c# - specflow如何处理多个参数?

标签 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;
}

最佳答案

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

您想如何在功能文件中指定它?您已经给出了您想要调用的方法的示例以及您希望 specflow 调用的步骤定义方法,但没有给出您希望特征文件读取的方式。

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

Given I want to add up the numbers 2,5,85,6,78

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

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

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

[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[] 就足够了。

关于c# - specflow如何处理多个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31789172/

相关文章:

java - 方法不能应用于给定类型

windows - 将具有特殊字符的参数从一个批处理文件发送到另一个批处理文件

php - 在 composer 上运行脚本时保持颜色输出

C# 定点转浮点

c# - 如何在循环中使用 UdpClient.BeginReceive

C#接口(interface)继承

java - 行为验证的值(value)

c# - 无需编译即可使用 xml 进行本地化?

python - django url 中的正则表达式错误

java - 为什么 cucumber 不能创建以 ')' 或 '.' 结尾的 bdd 语句的步骤定义?