重新使用Specflow在功能文件中使用C#文件声明

时间:2013-09-26 21:55:57

标签: c# specflow

我在使用When重复Specflow时遇到问题。代码示例如下所示:

Scenario: demo
Given ...
When do something

[Binding]
public class Demo{

 [When(@"do something")]
 public void DoSomething(){
  {  }
}

Scenario: demo 2
Given ...
When do something
...

[Binding]
public class Demo2{

 [When(@"do something")]
 public void DoSomething(){
 {  }

}

编译错误:模棱两可的步骤

是否可以重复使用[When(@"do something")],而不是通过将其更改为,例如[When(@"do something 2")]

2 个答案:

答案 0 :(得分:2)

您可以使用scoped bindings限制对特定功能,方案或代码的绑定。

因此,在您的示例中,您将拥有:

Scenario: demo
Given ...
When do something

[Binding]
public class Demo{

 [When(@"do something"), Scope(Scenario = "demo")]
 public void DoSomething(){
  {  }
}

Scenario: demo 2
Given ...
When do something
...

[Binding]
public class Demo2{

 [When(@"do something"), Scope(Scenario = "demo 2")]
 public void DoSomething(){
 {  }

}

但是,正如链接文章所说,与功能相关的步骤定义是anti-pattern,因为它们不会促进重复使用。

我建议重命名“When”语句,使它们不那么模糊,因为它们会帮助您和读取测试的任何不熟悉系统的人,例如而不是“做某事”将其写为“当我提交我的搜索参数时”。如果他们实际上做同样的事情,那么重复使用相同的步骤定义。

答案 1 :(得分:0)

是的,重用非常简单,因为Binding是全球性的。如果你的绑定与你的功能相匹配,而不是你的场景,这会有所帮助。

Feature: My new feature

Scenario: demo1
Given ...
When do something

Scenario: demo 2
Given ...
When do something
...

然后在MyNewFeature.Bindings.cs

[Binding]
public class MyNewFeature{

 [When(@"do something")]
 public void DoSomething(){
 {  }    
}

如果您想要跨功能分享您的绑定,请阅读http://www.specflow.org/documentation/Sharing-Data-between-Bindings/了解一些想法。