如何在SpecFlow中处理没有标题的表?

时间:2014-06-27 14:03:09

标签: c# .net ruby specflow gherkin

来自在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.SpeclFlow.Table对象:

  • CreateInstance:假设"服务"和"出租车"是他们不会的标题。
  • CreateSet:同时忽略第一行并返回键/值对。也不行。

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

1 个答案:

答案 0 :(得分:0)

似乎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但你应该明白这一点。