想象一下我有两个不同的功能:
我不会将这两个功能get
和update
放在同一个功能文件中,因为它们在逻辑上并不属于同一个人。但是我能做的是:我可以使用相同的数据-相同的小黄瓜设置步骤:
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
小黄瓜步骤?
答案 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
}
}