Specflow 无法识别步骤

Specflow not recognizing steps

我有一个包含以下内容的 specflow 功能文件 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 pending: No matching step definition found for one or more steps. using System; using TechTalk.SpecFlow;

namespace MyNamespace { [Binding] public class StepDefinitions { [When(@"Request for servername '(.*)' is processed")] public void WhenRequestForServernameIsProcessed(string p0) { ScenarioContext.Current.Pending(); } } }

这是为什么?我确实定义了这一步...

提前致谢

您必须将 [Binding] 属性添加到 class,以便 SpecFlow 可以找到您的步骤。

确保:

  • 该步骤确实存在(在源文件中搜索该步骤的描述)
  • 该步骤对应publicclass中的一个public方法,用[Binding]修饰
  • 步骤描述的参数、功能中的用法、支持的 C# 函数列表。
  • steps 属性是一个字符串。你不能连接例如前缀或后缀。

如果测试在单独的程序集中:

  • 它必须在该程序集的根目录下的文件中声明(Specflow 限制)。
  • 必须在功能文件程序集的标记中引用该程序集(请参阅文档)。

并不是说你不能有多个具有相同名称的 [Binding] class es(即使是不同的命名空间)或 specflow 会混淆并且可能找不到你的步骤。