何时在SpecFlow中运行[BeforeScenario]?

时间:2015-04-24 15:03:09

标签: c# specflow

我最近开始使用SpecFlow的现有项目。

我在O(N)中添加了一个[BeforeScenario]的方法来执行一些日志记录。 BaseSteps.cs在其类中没有BaseSteps.cs属性,但派生类确实有[Binding]

但是,[Binding]可以使用来自不同example.feature类的步骤。在这些情况下,DerivedSteps.cs在该功能的单个场景中被多次调用。

为什么会这样?什么是针对单个场景多次调用BeforeScenario?

2 个答案:

答案 0 :(得分:3)

某些代码可能有助于识别问题,但可能是派生的步骤类都具有方法[BeforeScenario](因为它们继承了它),因此specflow为每个派生类调用一次。

在Specflow中,通常没有必要参与任何继承,因为所有步骤都是全局的,并且可以从任何地方访问,因此只需将[BeforeScenario]移动到自己的类中,在其上删除[Binding]属性, Specflow会发现它是一种用途。

答案 1 :(得分:1)

避免在Steps类中使用继承 - 我发现它有时会导致奇怪的“找到多个匹配的绑定”

这里的第一个答案解释了为什么继承会导致与Specflow步骤混淆: https://stackoverflow.com/a/15508054/2213092

如果没有代码,很难确定它为什么多次调用特定的BeforeScenario。如果您仍在对此进行故障排除,可以在BeforeScenario方法上放置一个断点,然后向下看调用堆栈以查看它的触发位置。