我在使用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")]
答案 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/了解一些想法。