规范流无法识别步骤



我有一个规范流功能文件,其中包含以下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 会感到困惑并且可能无法找到您的步骤。

最新更新