java 如何为Cucumber(.feature)文件指定特定的StepDefinitions文件

szqfcxe2  于 2023-02-14  发布在  Java
关注(0)|答案(1)|浏览(218)

我正在用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...
}
gojuced7

gojuced71#

    • 备选案文1**

对于同一个步骤有不同的实现是一个不好的做法。为了正确地安排事情,你可以使用条件钩子。这样你就可以在一个特性文件中标记你的特性为@mytag1,而在另一个特性文件中标记特性为@mytag2
现在你可以区分两种情况下的Before钩子了,比如:

@Before("@mytag1")
public void before1() {
    // Some logic
}

@Before("@mytag2")
public void before2() {
    // Some different logic
}
    • P.S.**-尽可能避免使用@Before,因为它会对只分析小 cucumber 脚本的人隐藏测试逻辑
    • 备选案文2**

根本不要使用@Before,而是使用Background的强大功能,以便为两种情况进行不同的设置。

    • 备选案文3**

最后一个也是不太理想的选择是你特别要求的。当 cucumber 把所有东西粘在一起(没有明确的设置)时,它使用包结构来区分什么粘在什么上。
假设您有这样的功能文件:

Feature: my feature1

Scenario: test
  When doing a step

以及

Feature: my feature2

Scenario: test
  When doing a step

现在,如果你有这样的类/包结构,你可以有不同的When doing a step实现:

rootpkg
 somepkg1
  TestRunnerClass1
  somepkg2
   StepDef1
 somepkg3
  TestRunnerClass2
  somepkg4
   StepDef2

同时,您还拥有以下资源结构:

rootpkg/somepkg1/somepkg2/myfeature1.feature
rootpkg/somepkg3/somepkg4/myfeature2.feature

因此,一旦您运行mvn test,它就会选择两个测试运行器,并且由于每个测试运行器都在独立的包"分支"中,因此它将使用不同的步骤定义实现。

相关问题