您能否将泛型类型 传递给规范流步骤

本文关键字:范流步 泛型类型 | 更新日期: 2023-09-27 18:35:09

绑定规范流测试时,传入字符串、整数、json 文件很容易通过规范流变得容易,但是在 dry 的良好实践中,您可以在规范流步骤中传入泛型类型吗?

例如

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>在哪里,或者类似的东西?我想在干燥的良好实践中尽可能概括我的规格流。

您能否将泛型类型 <T>传递给规范流步骤

你可以用最少的代码重复来做到这一点:

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

不能在步骤中使用泛型。当 SpecFlow 将特征中的步骤中的参数转换为步骤绑定中的参数时,它使用的是方法参数的类型信息。因此,步骤绑定方法定义您获取的类型,而不是功能文件中的内容。

您是否查看了步骤参数转换?请参阅 http://www.specflow.org/documentation/Step-Argument-Conversions/

SpecFlow 有默认的(它们是用于 int、float 等的那些),您可以添加自己的。