当绑定specflow测试时,通过specflow可以轻松传入字符串,整数,json文件,但是在干燥的良好实践中,您是否可以在specflow步骤中传递泛型类型?
e.g。
Scenario
When I call the URL with the RequestObject and Type <url> <request> <type>
The response shall equal <response>
|url|request|type |
|xyn|abc |customObjectc#object |
[When(@"When I call the URL with the RequestObject and Type (.*)(.*)(.*)")]
public void WhenIBlablablabla<T>(string url, string request){}
<T>
是传入的类型,还是类似的?我想在干燥的良好做法中尽可能地概括我的规格。
答案 0 :(得分:0)
在步骤中不可能使用泛型。当SpecFlow将参数从特征中的步骤转换为步骤绑定中的参数时,它使用方法参数的类型信息。 因此,步骤绑定方法定义了您获得的类型,而不是功能文件中的内容。
你看过Step Argument Conversion了吗? 见http://www.specflow.org/documentation/Step-Argument-Conversions/
SpecFlow有默认值(它们是用于int,float,...的那些),你可以添加自己的。
答案 1 :(得分:0)
您可以使用最少的代码重复执行此操作:
public void WhenIBlablablabla(string url, string request, Type type)
{
// Do stuff
}
[When(@"When I call the URL with the RequestObject and Type (.*)(.*)(.*)")]
public void WhenICallTheURLWithTheRequestObjectAndType(string url, string request, string type)
{
Type systemType = Type.GetType(type);
WhenIBlablablabla(url, request, systemType);
}
请注意,此解决方案不允许您将泛型作为类型参数传递。您可以使用类反射来检查当前类的方法,以查看它们是否接受基于systemType
变量的参数和泛型类型。