使用Gherkin表的SpecFlow测试也在测试中尝试列名

时间:2016-05-09 11:49:08

标签: c# specflow

我有这个Specflow功能:

Given I have CoolData with <a> , <b> , <c> and <d>: 
| a                | b        | c         | d            |
| cool data        |          | 1.3       | Cool notes   |
| cool data        | 1.4      |           | Cool notes   |
| cool data        | 1.3      | 1.3       | Cool notes   |
| cool data        | 1.3      | 1.3       | Cool notes   |  

我有这个方法:

[Given(@"Given I have CoolData with (.*) , (.*) , (.*) and (.*) :")]
    public void GivenIhaveCoolDatawithAnd(string p0, string p1, string p2, string p3, Table table)
    {
        var cool = new CoolData
        {
            a= p0,
            b= decimal.Parse(p1),
            c= decimal.Parse(p2),
            d= p3,
        };
    }

我的问题:当我运行此测试时,p0p1p2p3会映射到字面上说"<a>"的字符串,{{ 1}},"<b>""<c>",而不是表格中的值。我究竟做错了什么?我试图为此表中的每一行重复单元测试。

1 个答案:

答案 0 :(得分:3)

你误解了小黄瓜是如何运作的。你所做的是把两个概念,即表格和场景示例混为一谈。请参阅the documentation for cucumber并查看数据表和方案大纲之间的区别

我相信你不想在这个例子中有一个表,所以你应该使用一个带有例子的场景大纲,如下所示:

Scenario Outline: some title
    Given I have CoolData with <a> , <b> , <c> and <d>

Examples:
| a                | b        | c         | d            |
| cool data        |          | 1.3       | Cool notes   |
| cool data        | 1.4      |           | Cool notes   |
| cool data        | 1.3      | 1.3       | Cool notes   |
| cool data        | 1.3      | 1.3       | Cool notes   |  

这将导致生成4个测试,每个测试运行来自示例

的一行数据

你还需要调整你的步骤方法,不要指望现在的表格(因为表格现在是一组例子)

[Given(@"Given I have CoolData with (.*) , (.*) , (.*) and (.*)")]
    public void GivenIhaveCoolDatawithAnd(string p0, string p1, string p2, string p3)
    {
        var cool = new CoolData
        {
            a= p0,
            b= decimal.Parse(p1),
            c= decimal.Parse(p2),
            d= p3,
        };
    }