编程语言
首页 > 编程语言> > c# – 如何使用SpecFlow中的table.CreateSet <>(myClass)()生成缺失值?

c# – 如何使用SpecFlow中的table.CreateSet <>(myClass)()生成缺失值?

作者:互联网

我第一次使用SpecFlow为我的项目编写测试,我遇到了一个小问题.

我有下一堂课:

public class FancyName
{
    [DataMember]
    public Guid Guid { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public List <Country> Countries { get; set; }
}

我想在我的测试中使用SpecFlow助手生成这个类.

以下是场景的一部分:

[...]
When i add some names
    | Name | Countries |
    | UK   | 1         |
    | US   | 2         |
[...]

我尝试在步骤定义中解析它,如下所示:

[When(@"I add some names")]
public void AddNames(Table table)
{
    var names = table.CreateSet<FancyName>();
    [...]
}

我遇到了两个问题:

>我没有传递Guid因为想要像Guid.NewGuid()那样生成它所以创建的对象包含null
>我将国家作为排序传递,但我需要创建List< Country>().

我曾经尝试迭代表并手动创建FancyName对象,但据我所知,它不是SpecFlow方式.我试图查看文档,并没有找到合适的解决方案.

可能有人知道解决这个问题的真正好方法吗?
提前致谢.

解决方法:

Table.CreateSet&LT&GT无法表演魔法.它不能知道它应该为你的对象创建一个新的Guid,或者它应该创建一个包含2个国家的列表.我想你必须自己创建这个对象.

解决此问题的最佳方法是使用[StepArgumentTransformation]

这样的事情:

[StepArgumentTransformation]
public List<FancyName> TransformToFancyName(Table table)
{
    //create the list from the table contents
}

[When(@"I add some names")]
public void AddNames(List<FancyName> names)
{
    .. use your FancyNames here
}

specflow将为任何具有List< FancyName>参数的Step调用StepArgumentTransformation.作为最后一个参数和功能中的相应表

标签:c,bdd,specflow
来源: https://codeday.me/bug/20190717/1487675.html