你能将Generic type <t>传递给specflow步骤吗?

时间:2016-02-18 13:02:44

标签: c# asp.net-web-api cucumber specflow

当绑定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>是传入的类型,还是类似的?我想在干燥的良好做法中尽可能地概括我的规格。

2 个答案:

答案 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变量的参数和泛型类型。