SpecFlow要素文件中的多个多行示例

时间:2011-05-31 17:24:11

标签: c# specflow

这似乎是其中一个问题,如果你知道答案,很明显,如果你不知道答案,那就不可能......

如何在SpecFlow要素文件中包含多行示例表?

我的例子是:

        Given there is some invalid input:
        | input |
        | """ Multi-line example 1
              because there are multiple lines
              """ |
        | """Multi-line example 2
             with even more lines
             than the previous example
             """" |
    When something interesting happens
    Then the error is shown

提前致谢。

3 个答案:

答案 0 :(得分:3)

你可以这样做:

Given there is some invalid input:
    | <Here goes column Name> | <Column Name2..>  |
    | Line 1 for column 1     | Line 1 for column2|
    | Line 2 for column 1     | Line 2 for column2|
    | ..and so on             | and so on...      |
When something interesting happens
Then the error is shown

,这将转换为

[Given(@"there is some invalid input:")]
public void GivenThereIsSomeInvalidInput(Table table)
{
   foreach (var row in table.Rows)
   {
       string info1= = row["<Here goes column Name>"];
       string info2= = row["<Column Name2..>"];
   }
}

我知道你有几组无效输入,你可以创建另一个场景,就像这样,只需在表中添加更多输入数据,不需要额外的代码。

希望这能解决您的问题

答案 1 :(得分:3)

好吧,看起来这是不可能的according to a poster in the Google SpecFlow group。他还指出,在我的行为测试中可能有太多的实现,也许这更适合于单元测试。

答案 2 :(得分:2)

由于我自己比较了实际值和期望值(不使用SpecFlow的自动表比较功能),我允许使用正则表达式来表示特殊值,比如包含换行符的字符串:

Then I expect the result values
    | Name            | Value              |
    | Multilinestring | @@Multline\nString |

我的比较功能就是这样:

private static bool compare (string actual, string expected)
{
    if (expected.StartsWith("@@"))
        return Regex.Match(actual, expected.Substring(2)).Success;
    ....
}