我如何在SpecFlow中处理没有标头的表

本文关键字:处理 SpecFlow | 更新日期: 2023-09-27 18:10:43

从在Ruby中使用Gherkin开始,我想看看c# . net上的SpecFlow是否适合我。在Ruby中,我能够处理一个表,其中字段位于第一列,值位于第二列,如下所示:

Then I see a summary of details in the overview page
| Service           | Taxi        |
| Arrival Station   | Middlebourg |
| Arrival Vehicle   | SAT12901    |
| Arrival Date      | 27/06/2014  |
| No of Passengers  | 2           |

在SpecFlow中,我可以使用techtalk . SpecFlow . table对象,它具有以下功能:

  • CreateInstance:假设"Service"answers"Taxi"是标题,而它们不是。
  • CreateSet:也忽略第一行并返回键/值对。

当然这里的工作是改变我的表的布局,以匹配SpecFlow的表对象的工作。但是是否有替代方法,比如Ruby中的"rows_hash"函数?谢谢!

我如何在SpecFlow中处理没有标头的表

SpecFlow似乎总是假设一个头。你可以用:

table.Header

获取对标题的原始访问。这只是一个字符串的集合,因此您可以使用

访问单个元素:
var firstRowFirstColumn = table.Header[0];
var firstRowSecondColumn = table.Header[1]; 

然后你可以像这样访问表中剩下的单独的行:

foreach(var row in table.Rows)
{
   var first = row[0];
   var second = row[1];
   ... use the values ...
}

获取表

中的所有其他值

如果你想要没有头文件的原始访问,我会创建一个这样的扩展方法:

public static IEnumerable<TableRow> AllRows(this Table table)
{
     yield return new TableRow(table, table.Header);
     foreach(var row in table.Rows)
     {
         yield return row;
     }
 }

我不知道你是否可以创建一个TableRow(它看起来应该是可能的从源代码),你可能不得不创建自己的TableRow对象包装specflow TableRow,但你应该得到的想法。