Testing SpecFlow-多个BeforeCasenario方法的排序

Testing SpecFlow-多个BeforeCasenario方法的排序,testing,specflow,Testing,Specflow,我的脚被SpecFlow弄湿了,我真的很喜欢它 除了一些棘手的问题。。。类似于功能和场景设置代码 在一个名为InfrastructureSteps.cs的“通用”文件中,我有针对每个场景都应该运行的通用设置代码,因此我的方法如下所示: [BeforeScenario] public void SetupDbContext() { // define some basic stuff, set up a database transaction context etc. } 这需要在每个

我的脚被SpecFlow弄湿了,我真的很喜欢它

除了一些棘手的问题。。。类似于功能和场景设置代码

在一个名为
InfrastructureSteps.cs
的“通用”文件中,我有针对每个场景都应该运行的通用设置代码,因此我的方法如下所示:

[BeforeScenario]
public void SetupDbContext()
{
    // define some basic stuff, set up a database transaction context etc.
}
这需要在每个场景之前运行,到目前为止,它运行得很好

但是现在,我在一个特定于测试的步骤文件中有两个场景,它们在运行之前也需要相当广泛的设置。因此,我在
.feature
中用标签标记了他们的场景:

@needs_extra_setup
Scenario: .....
   Given .....
   When .....
   Then ......
并在场景之前实施了特定于测试的
设置方法:

[BeforeScenario("needs_extra_setup")]
public void DoExtraSetupForMyScenario()
{
   // do stuff
}
它工作-被调用-但在调用通用
[BeforeCasenario]
方法之前被调用(因此失败-在通用设置方法中设置的内容不存在并导致代码失败)

那么,SpecFlow中是否有任何方法可以对
[BeforeCasenario]
方法进行排序?或者我是否可以告诉特定的
[BeforeCasenario]
方法首先执行“base”
[BeforeCasenario]
方法,就像在重写方法中调用base方法一样

当然,我可以显式地调用“base”
[beforecasenario]
方法——但这似乎有点像大锤式方法


有什么想法?想法?指针吗?

我很确定,您可以(也可能不应该)为场景的执行顺序排序

但是你可以使用一些其他的功能,比如BeforeFeature,也许可以这样解决

另一种方法是简单地使用一个标志来检查是否在特定内容中设置了常规内容,并调用SetupDbContext方法(或者最好是SetupDbContext依次调用的内容)

使用字典存储您的标志


我希望你觉得这很有帮助

我也有同样的问题。我最终使用了

if(ScenarioContext.Current.ScenarioInfo.Tags.Contains("needs_extra_setup"))
在[BeforeSecenario]方法的末尾。
这在Marcus已经链接到的页面上进行了描述:

这现在可以在specflow的v2中实现,在撰写本文时,该版本为beta版


步骤绑定属性有一个可选的order属性,允许您指定钩子的顺序。将首先处理较小的数字,默认的顺序值为10000。

您也可以使用FeatureContext。当前用于BeforeFeatureRanks!正在寻找一种方法来区分Web(即Selenium)还有非网络验收测试,Hooks文档正好满足了我的需要:)谢谢<代码>[订单]
确实进入了