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

SpecFlow test with Gherkin table also trying column name in tests

我有这个 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 被映射到字符串 [= 17=、"<b>""<c>""<d>",而不是 table 中的值。我究竟做错了什么?我正在尝试为此 table 中的每一行重复单元测试。

你误解了小黄瓜的工作原理。您所做的是将两个概念混为一谈,即 table 和场景示例。看the documentation for cucumber,看看数据table和场景大纲

的区别

我相信在这种情况下您不想要 table,因此您应该使用带有示例的场景大纲,如下所示:

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 个测试,每个测试 运行 来自示例的一行数据

您还需要调整您的步进方法,以不期望 table 现在(因为 table 现在是一组示例)

[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,
        };
    }