黄瓜:在每个功能文件中使用完全相同的小黄瓜设置步骤

时间:2019-12-03 12:51:49

标签: cucumber

想象一下我有两个不同的功能:

  • get.feature
  • update.feature

我不会将这两个功能getupdate放在同一个功能文件中,因为它们在逻辑上并不属于同一个人。但是我能做的是:我可以使用相同的数据-相同的小黄瓜设置步骤:

Given there are the following entries in the database
    | id | value |
    | 1  | bla   |
    | 2  | blub  |

现在的问题是我不能为此创建一个Background,因为我将具有两个不同的功能:

Feature: Get
    // Here I want to use the given step which will be the same for each feature
    When ...
    Then ...
Feature: Update
    // Here I want to use the given step which will be the same for each feature
    When ...
    Then ...

如何设置黄瓜步骤,以便可以在每个功能中重复使用given小黄瓜步骤?

2 个答案:

答案 0 :(得分:1)

简单的解决方案是在每个功能文件中调用该步骤。现在如果这很乏味,因为您的步骤是用巨大的数据表编写的,则步骤很糟,只需重新编写没有数据表的步骤即可。

以您的示例为例

Given there are the following entries in the database
    | id | value |
    | 1  | bla   |
    | 2  | blub  |

也要更改

Given bla and blub are in the database

通过执行此操作,您已将HOW从功能向下推至步骤定义。

让我们说您将其实现为类似

Given 'bla and blub are in the database' do
  db = get_connection
  ...
  db.insert(1, bla)
  db.insert(2, blub)
  ...
end

再次您可以通过以下方法降低操作方法


Given 'bla and blub are in the database' do
  add_bla_and_blub_to_db
end

现在正在使用辅助方法来执行您的实现。并且一旦有了辅助方法,就可以从其他步骤定义中调用它们。

TLDR使您的步骤更简单,只需调用每个功能中的步骤即可。

答案 1 :(得分:0)

执行此操作的最佳方法是使用挂钩。在您的stepdefinition包中创建一个类(您不必将其称为钩子,但是可以),该类包括带有@Before标记的方法。它的运行方式与背景相同,但将在所有功能文件中运行。确保从Cucumber而不是从JUnit导入一个。

public class Hooks {

  @Before
  public void doBefore(){
    //do things
  }
}