覆盖 SpecFlow 中的步骤声明?

Override a step declaration in SpecFlow?

所以在我的工作中,我们有一个核心 SpecFlow 库,我们的不同团队可以使用它来实现自动化。这个库有一些声明的步骤。

例如,图书馆可能有这样的东西:

When I click the button

但是,假设我想定义我自己的使用完全相同措辞的步骤声明。是否可以覆盖它?

如果您在同一个步骤定义文件或另一个步骤定义文件中有两次相同的步骤(在您的情况下 - 当我单击按钮时),您将得到 DuplicateStepException。即使您使用 given or then 注释。这是因为步骤定义是全局加载的,因此导致冲突。

此外,您不能扩展包含文件的步骤定义或挂钩,因为 Cucumber 会抛出一个错误,表明这是不可接受的。因此,您无法通过继承来覆盖行为。

您将需要一起编写一个不同的步骤,或者如果可能的话,将按钮作为参数传递给现有步骤,并在允许修改库代码的情况下放入逻辑。

正如@Grasshopper 所写,步骤定义是全局的。
但是您可以使用 Scopes 覆盖它。
参见 http://www.specflow.org/documentation/Scoped-Bindings/

在这种情况下,不要忘记在每个场景中指定将调用标记或原始步骤定义。

这样做是一个非常糟糕的主意,因为任何使用此步骤但失败的场景都将很难理解和调试。

一般来说,在场景中使用通用库步骤也不是一个好主意。场景不应包含一般步骤或如何完成事情的描述。相反,它们应该包含特定于您的业务环境的步骤,并且这些应该描述正在做什么以及为什么要这样做。

所以

When I click on sign in
   And I fill in my email with ...
   ...

我们得到更简单和更抽象的

 When I sign in

这都是关于我们在做什么,而与我们如何做无关。