我正在用cubble做一些测试,目前我有两个. feature文件,一个用于登录,一个用于注册),每个. feature文件都有一个StepDefinitions文件。
每个StepDefinitions文件都有一个@Before方法,因此我可以在开始测试之前进行一些设置。
问题是,当我运行所有登录测试时,既为登录测试指定了@Before,又为注册测试指定了@Before。
*** cucumber 档案(注册检验):***
Feature: Sign up
As a user
I want to create a new account
So that I can use the application
Background:
Given I am on the sign up page
Scenario Outline: User can create a new account
When I fill name with "<first_name>"
And I fill lastname with "<last_name>"
And I fill email with "<email>"
And I fill password with "<password>"
And I fill password confirmation with "<password_confirmation>"
When I click on Sign up
Then I must be authenticated
Examples:
| first_name | last_name | email | password | password_confirmation |
| Rita | A. Cheatham | RitaACyheatham@armyspy.com | 123456789 | 123456789 |
*** cucumber 文件的步骤定义:***
public class SignUpStepDefinitions {
private SignUp signUp;
@Before
public void before() {
signUp = new SignUp();
signUp.beforeEach();
}
# Code continuation...
}
1条答案
按热度按时间gojuced71#
对于同一个步骤有不同的实现是一个不好的做法。为了正确地安排事情,你可以使用条件钩子。这样你就可以在一个特性文件中标记你的特性为
@mytag1
,而在另一个特性文件中标记特性为@mytag2
。现在你可以区分两种情况下的
Before
钩子了,比如:@Before
,因为它会对只分析小 cucumber 脚本的人隐藏测试逻辑根本不要使用
@Before
,而是使用Background
的强大功能,以便为两种情况进行不同的设置。最后一个也是不太理想的选择是你特别要求的。当 cucumber 把所有东西粘在一起(没有明确的设置)时,它使用包结构来区分什么粘在什么上。
假设您有这样的功能文件:
以及
现在,如果你有这样的类/包结构,你可以有不同的
When doing a step
实现:同时,您还拥有以下资源结构:
因此,一旦您运行
mvn test
,它就会选择两个测试运行器,并且由于每个测试运行器都在独立的包"分支"中,因此它将使用不同的步骤定义实现。