【问题标题】:Multiple Multi-Line Examples in SpecFlow Feature FileSpecFlow 特征文件中的多个多行示例
【发布时间】:2014-03-28 19:25:49
【问题描述】:

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

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

我的例子是:

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

提前致谢。

【问题讨论】:

    标签: c# specflow


    【解决方案1】:

    你可以这样做:

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

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

    希望这能解决你的问题

    【讨论】:

    • 这是个好主意,我明白你的意思,但这违背了为无效输入提供单一场景的目的。如果我添加另一个场景,则不再需要多个多行参数,我可以使用常规的多行方法。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      由于我自己比较实际值和预期值(不使用 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;
          ....
      }
      

      【讨论】:

        猜你喜欢
        • 2015-08-16
        • 1970-01-01
        • 2020-05-03
        • 2016-12-23
        • 1970-01-01
        • 2022-04-26
        • 2017-09-12
        • 2020-01-05
        • 1970-01-01
        相关资源
        最近更新 更多