我有一个规范流功能文件,其中包含以下When
When Request for servername 'someurl.com/szhm04c4.xml' is processed
当我按F12
时,Visual Studio告诉我我可以复制以下步骤定义:
[When(@"Request for servername '(.*)' is processed")]
public void WhenRequestForServernameIsProcessed(string p0)
{
ScenarioContext.Current.Pending();
}
我将其粘贴到从Steps
继承的步骤文件中并实现它
public void WhenRequestForServernameIsProcessed(string servername)
{
var httpRequest = this.Bootstrapper.GetFake<IHttpRequest>();
A.CallTo(() => httpRequest.Path).Returns(servername);
var httpContext = this.Bootstrapper.Get<IHttpContext>();
this.Bootstrapper.Get<IHostRequest>().Process(httpContext);
}
当我执行测试时,它发出了错误,并且收到以下错误消息:
TechTalk.SpecFlow.SpecFlowException Test 挂起:无匹配步骤 找到一个或多个步骤的定义。使用系统;用 TechTalk.SpecFlow;
命名空间 MyNamespace { [绑定] 公共类步骤定义 { [When(@"Request for servername '(.*(' is processing"(] public void WhenRequestForServernameIsProcessing(string p0( { ScenarioContext.Current.Pending((;} } }
为什么?我确实定义了这一步...
提前致谢
您必须将 [Binding] 属性放入类,以便 SpecFlow 可以找到您的步骤。
确保:
- 该步骤确实存在(在源文件中搜索该步骤的说明(
- 该步骤对应于用 [Binding] 修饰的公共类中的公共方法
- 步骤说明的参数、功能中的用法、支持 C# 函数的参数一致。
- 步骤属性是一个字符串。例如,您不能连接前缀或后缀。
如果测试位于单独的程序集中:
- 它必须在该程序集根目录下的文件中声明(规范流限制(。
- 必须在功能文件程序集的标记中引用该程序集(请参阅文档(。
并不是说您不能有多个具有相同名称的 [Binding] 类(即使不同的命名空间(或 specflow 会感到困惑并且可能无法找到您的步骤。