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 会混淆并且可能找不到你的步骤。
我有一个包含以下内容的 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 会混淆并且可能找不到你的步骤。