0

在 SpecFlow步骤定义的文档中,它显示了一个示例,您可以在该示例中通过在场景中使用逗号分隔列表在步骤定义中创建一个列表:

例如:

鉴于我在“周二、周五、周日”有空

会导致:

@Given("I am available on \"(.+)\"")
public void I_have_cukes_in_my_belly(List<String> days) {
    // Do something with the days
}

不幸的是,当我这样做时,我得到了这个:

@Given("I am available on ""(.*)"")
public void I_have_cukes_in_my_belly(string days) {
    // Do something with the days
}

我正在使用 VS 2012 和 SpecFlow 1.9.1 版。有谁知道我可能做错了什么?或者我该如何解决这个问题?

提前致谢。

4

6 回答 6

4

您可以执行以下操作:

鉴于我在这些日子有空:

| 周天 |

| 星期一 |

| 星期二 |

| 星期三 |

然后你可以使用表格并将其转换为列表......

@Given("I am available on these days:")
public void I_have_cukes_in_my_belly(Table table) {
    List<string> days = new List<string>();
    foreach (var tableRow in table.Rows)
    {
        days.Add(tableRow["DaysOfWeek"]);
    }
 }
于 2015-06-26T07:18:40.787 回答
2

目前似乎支持列表的唯一语言是 Java。我假设您在使用 VS2012 时使用 C#。如果您将链接页面上的代码示例切换到 C# 而不是 Java,List 示例就会消失,我会看到与您相同的行为。

但是,您可以简单地将字符串作为参数并将其放入列表中。1行。

C#

[Given(@"I am available on ""(.*)""")]
public void GivenIAmAvailableOn(string days)
{
        List<String> daysList = new List<string>(days.Split(','));
于 2013-01-04T22:55:18.027 回答
2

您可以尝试查询 Table 实例以获取您要查找的列表。

expectedTable.Rows.Select(row => row.Values.FirstOrDefault()).ToList()
于 2018-03-15T11:26:32.947 回答
0

如果您在Step Definitions页面上单击 C#,您将看到 List examples 消失。但是,正如 OCary 指出的那样,您可以通过拆分字符串来模拟它。

但我建议无需转换回列表,您可以通过 Linq 使用 IEnumerable 代替,这样您就可以更简单地解析列表,即

[Given(@"I am available on ""(.*)""")]
public void GivenIAmAvailableOn(string days)
{
    var daysList = from x in days.Split(',') select x.Trim();
于 2013-01-06T19:58:21.887 回答
0

目前我正在使用步骤参数转换来获得正确的列表:

[StepArgumentTransformation(@"((?:.*)(?:,.*)*)")]
public List<string> StringToList(string list)
{
    // (
    //    (?:    - Don't capture
             .*  - Match any character
    //    )
    //    (?:    - Don't capture
    //       ,   - Separated by a comma
    //       .*  - Match any character
    //    )*     - Zero or more items after the first item
    // )

    return list
        .Split(',')
        .Select(x => x.Trim())
        .ToList();
}

然后你就可以使用List<string>作为参数类型,像这样:

[Given(@"I am available on ""(.*)""")]
public void GivenIAmAvailableOn(List<string> days)
{
}
于 2016-05-24T11:13:36.787 回答
0

用于Table转换IEnumerable<T>器:

[StepArgumentTransformation]
public static IEnumerable<string> ToStringEnumerable(Table table) =>
    table.Rows.Select(t => t.Values.Single());

然后你可以在你的例子中使用它(或者List<T>如果你喜欢的话):

@Given("I am available on \"(.+)\"")
public void I_have_cukes_in_my_belly(IEnumerable<String> days) {
    // Do something with the days
}
于 2020-12-25T10:07:17.187 回答