1

这似乎是那些问题之一,如果你知道答案,那是显而易见的,如果你不知道,那是不可能的......

如何在 SpecFlow 功能文件中包含多行示例表?

我的例子是:

        鉴于有一些无效的输入:
        | 输入 |
        | """ 多行示例1
              因为有多条线路
              """ |
        | """多行示例2
             有更多的线条
             比上一个例子
             """" |
    当有趣的事情发生时
    然后显示错误

提前致谢。

4

3 回答 3

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..>"];
   }
}

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

希望这能解决你的问题

于 2011-06-01T15:15:39.743 回答
3

好吧,根据 Google SpecFlow 组中的海报,这似乎是不可能的。他还指出,我的行为测试中可能有太多的实现,也许这更适合单元测试。

于 2011-06-06T15:31:11.153 回答
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;
    ....
}
于 2014-03-28T11:25:49.780 回答