覆盖SpecFlow中的步骤声明

本文关键字:声明 SpecFlow 覆盖 | 更新日期: 2023-09-27 18:15:46

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

例如,标准库可能有这样的内容:

When I click the button

但是,假设我想定义使用完全相同措辞的自己的步骤声明。有可能推翻它吗?

覆盖SpecFlow中的步骤声明

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

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

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

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

所以不用

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

我们得到更简单更抽象的

 When I sign in

都是关于我们在做什么,而不是关于我们怎么做。

你会得到一个DuplicateStepException,如果你有一个相同的步骤(在你的情况下-当我点击按钮)两次无论是在相同的步骤定义文件或另一个。即使您使用给定或然后的注释。这是因为步骤定义是全局加载的,从而导致冲突。

也不能扩展包含步骤定义或钩子的文件,因为cucumber会抛出一个错误,认为这是不可接受的。因此,您无法通过继承重写行为。

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