SpecFlow - 如何在具有自定义类型的实体上设置测试数据

SpecFlow - How to setup test data on a entity with a custom type

在 C# 中使用 SpecFlow -Entity Framework 应用程序,我正在尝试为以下结构的实体设置测试数据。

public partial class TYPE1
{
    public int Prop1 { get; set; }
    public virtual ICollection<TYPE2> Prop2 { get; set; }
}

public partial class TYPE2
{
    public int Prop3 { get; set; }
}

测试数据:

Given I have a Type1 record with following data
| Prop1 | Prop2 |
| 123   | 0     |


[Given(@"I have a Type1 record with following data")]
public void GivenIHaveAType1RecordWithFollowingData(Table table)
{
    foreach (var row in table.Rows)
    {
        var record =
            this.PopulateModelFromTableRow<TYPE1>(row);
        this.test.DbContext.TYPE1.Add(record);
    }
}

我正在尝试找出一种方法来为 Prop2 分配一个 Type 2 值列表。我该怎么做?

您需要通过两个单独的步骤创建实体并填充集合:

Given I have a Type1 record with following data
    | Prop1 |
    | 123   |
And the Type1 record I just created as the following Prop2:
    | Prop2 |
    | 0     |
    | 4     |

第一步将创建一个新的 Type1 对象并将其保存为 Prop2 的空集合。下一步应该获取您刚刚创建的 Type1 对象,并使用数据 table.

将项目添加到集合中

Gherkin 从未被设计为在一个步骤中构建包含集合的复杂对象。有很多解决方法,但它们通常会导致测试更难阅读和维护。最佳做法是在专门的步骤中​​填充实体的集合属性。