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

Cucumber:在每个功能文件中使用完全相同的小黄瓜设置步骤,cucumber,Cucumber,假设我有两个不同的特征: Feature: Get // Here I want to use the given step which will be the same for each feature When ... Then ... 获取功能 update.feature 我不会将这两个功能get和update放在同一个功能文件中,因为它们在逻辑上不属于一起。但我能做的是:我可以使用相同的数据-相同的小黄瓜设置步骤: Given there are the

假设我有两个不同的特征:

Feature: Get
    // Here I want to use the given step which will be the same for each feature
    When ...
    Then ...
  • 获取功能
  • update.feature
我不会将这两个功能
get
update
放在同一个功能文件中,因为它们在逻辑上不属于一起。但我能做的是:我可以使用相同的数据-相同的小黄瓜设置步骤:

Given there are the following entries in the database
    | id | value |
    | 1  | bla   |
    | 2  | blub  |
现在的问题是,我无法为此创建
背景,因为我将有两个不同的功能:

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

如何设置黄瓜步骤,以便在每个功能中重用
给定的
小黄瓜步骤?

最好的方法是使用挂钩。在stepdefinition包中创建一个类(您不必调用它,但可以调用它),该类包含一个带有@Before标记的方法。它的操作与后台相同,但会在所有功能文件中运行。确保从Cucumber而不是JUnit中导入

public class Hooks {

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

简单的解决方案就是在每个功能文件中调用步骤。现在,如果这是一个乏味的步骤,因为您的步骤写得很糟糕,并且有一个巨大的数据表,那么只需在没有数据表的情况下重新编写步骤

以你为例

Given there are the following entries in the database
    | id | value |
    | 1  | bla   |
    | 2  | blub  |
也改变它

Given bla and blub are in the database
通过这样做,您已经将如何从特征向下推到了步骤定义

假设您将其实现为

Given 'bla and blub are in the database' do
  db = get_connection
  ...
  db.insert(1, bla)
  db.insert(2, blub)
  ...
end
同样,您可以通过执行以下操作来向下推HOW


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

它现在使用一个助手方法来实现。一旦有了helper方法,就可以从其他步骤定义中调用它们


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

您可以在不同的功能中重用步骤/步骤定义。或者,如果您希望在每个场景之前运行相同的安装程序,则必须使用@before hooks.@Mulgard,您可以在任何功能文件中始终重用步骤定义。在你的情况下,给定的步骤可以放在背景中。嗨!我不想重复使用步骤定义。我想重复使用小黄瓜步骤。我也不能跨多个功能文件使用背景。@Mulgard,如果你想重用小黄瓜步骤,那么步骤定义应该重用。我不认为我理解你的意思。我有两个独立的功能,我不想在给定的
步骤中多次写入数据表。我希望在每个要素文件中使用相同的数据表。重用步骤定义应该如何帮助我做到这一点?步骤定义需要一个数据表。我如何从@Before钩子运行小黄瓜步骤?我需要进入数据表,你不会的。相反,您应该在hooks类中创建一个数组(最有可能是数组),该数组保存数据表所需的信息。如果必须将表存储在小黄瓜中,则必须在所有要素文件中写入该表。确定。所以我必须在每个特征文件中重复我自己。该死那不是黄瓜的一大弱点吗?