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<>无法表演魔法.它不能知道它应该为你的对象创建一个新的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