当 SpecFlow 中 [BeforeScenario] 为 运行 时,由什么决定?
What governs when [BeforeScenario] is run in SpecFlow?
我最近开始了一个使用 SpecFlow 的现有项目。
我在 BaseSteps.cs
中添加了一个带有 [BeforeScenario]
的方法来执行一些日志记录。 BaseSteps.cs
在其 class 上没有 [Binding]
属性,但派生的 class 确实具有 [Binding]
.
但是,example.feature
可以使用来自不同DerivedSteps.cs
class 的步骤。在这些情况下,[BeforeScenario]
在单个场景中从该功能被多次调用。
为什么会这样?什么是为单个场景多次调用 BeforeScenario?
一些代码可能有助于识别问题,但可能派生步骤 classes 都具有方法 [BeforeScenario]
(因为它们继承了它),因此 specflow 会为每个步骤调用一次派生 class.
在 Specflow 中,通常不需要涉及任何继承,因为所有步骤都是全局的并且可以从任何地方访问,所以只需将您的 [BeforeScenario]
移到它自己的 class 中,敲击 [Binding]
上的属性,Specflow 会找到它并使用它。
避免在您的步骤中使用继承 类 - 我发现它有时会导致奇怪 "multiple matching bindings found"
这里的第一个答案解释了为什么继承会导致与 Specflow 步骤混淆:
如果没有代码,则很难确定它为何多次调用特定的 BeforeScenario。如果您仍在解决这个问题,您可以在 BeforeScenario 方法上放置一个断点,然后查看调用堆栈以查看它是从哪里触发的。
我最近开始了一个使用 SpecFlow 的现有项目。
我在 BaseSteps.cs
中添加了一个带有 [BeforeScenario]
的方法来执行一些日志记录。 BaseSteps.cs
在其 class 上没有 [Binding]
属性,但派生的 class 确实具有 [Binding]
.
但是,example.feature
可以使用来自不同DerivedSteps.cs
class 的步骤。在这些情况下,[BeforeScenario]
在单个场景中从该功能被多次调用。
为什么会这样?什么是为单个场景多次调用 BeforeScenario?
一些代码可能有助于识别问题,但可能派生步骤 classes 都具有方法 [BeforeScenario]
(因为它们继承了它),因此 specflow 会为每个步骤调用一次派生 class.
在 Specflow 中,通常不需要涉及任何继承,因为所有步骤都是全局的并且可以从任何地方访问,所以只需将您的 [BeforeScenario]
移到它自己的 class 中,敲击 [Binding]
上的属性,Specflow 会找到它并使用它。
避免在您的步骤中使用继承 类 - 我发现它有时会导致奇怪 "multiple matching bindings found"
这里的第一个答案解释了为什么继承会导致与 Specflow 步骤混淆:
如果没有代码,则很难确定它为何多次调用特定的 BeforeScenario。如果您仍在解决这个问题,您可以在 BeforeScenario 方法上放置一个断点,然后查看调用堆栈以查看它是从哪里触发的。