1

我在重用Whenwith 时遇到问题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")]

4

2 回答 2

2

您可以使用范围绑定将绑定限制为特定功能、场景或标签。

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

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(){
 {  }

}

但是,正如链接文章所说,与功能耦合的步骤定义是一种反模式,因为它们不促进重用。

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

于 2013-09-26T22:31:07.637 回答
0

是的,重用非常容易,因为Bindings 是全局的。如果将您的绑定与您的功能相匹配,而不是您的场景,这将有所帮助。

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/以获得一些想法。

于 2013-09-26T22:34:06.167 回答