我最近开始使用SpecFlow的现有项目。
我在O(N)
中添加了一个[BeforeScenario]
的方法来执行一些日志记录。 BaseSteps.cs
在其类中没有BaseSteps.cs
属性,但派生类确实有[Binding]
。
但是,[Binding]
可以使用来自不同example.feature
类的步骤。在这些情况下,DerivedSteps.cs
在该功能的单个场景中被多次调用。
为什么会这样?什么是针对单个场景多次调用BeforeScenario?
答案 0 :(得分:3)
某些代码可能有助于识别问题,但可能是派生的步骤类都具有方法[BeforeScenario]
(因为它们继承了它),因此specflow为每个派生类调用一次。
在Specflow中,通常没有必要参与任何继承,因为所有步骤都是全局的,并且可以从任何地方访问,因此只需将[BeforeScenario]
移动到自己的类中,在其上删除[Binding]
属性, Specflow会发现它是一种用途。
答案 1 :(得分:1)
避免在Steps类中使用继承 - 我发现它有时会导致奇怪的“找到多个匹配的绑定”
这里的第一个答案解释了为什么继承会导致与Specflow步骤混淆: https://stackoverflow.com/a/15508054/2213092
如果没有代码,很难确定它为什么多次调用特定的BeforeScenario。如果您仍在对此进行故障排除,可以在BeforeScenario方法上放置一个断点,然后向下看调用堆栈以查看它的触发位置。