只有在运行该类的步骤时,才会运行Cucumber“setup method”

时间:2017-08-08 09:13:21

标签: java cucumber cucumber-jvm

我正在使用@Before Cucumber标记为该文件中列出的任何步骤设置安装方法。但是,如果当前执行的Cucumber包含该文件中列出的步骤,我只希望运行此方法。

目前,无论正在运行的方案是否尝试在文件中执行步骤定义,所有指定的@Before方法都会运行。

例如:

 public class StepDefA {
        @Before
        public void setupA() {
            // do setup
        }

        @Then("^some step$")
        public void thenSomeStep() { }
    }

    public class StepDefB {
        @Before
        public void setupB() {
            // more setup
        }

        @Then("^some other step$") {}
    }


Scenario:
Then some step # setupA and setupB both run

问题在于,尽管我只执行了“一些步骤”,但是运行了setupB。我只想运行setupA,因为正在运行的步骤在该文件中。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用标记的挂钩,如下所示:

...

public class StepDefB {
    @Before("@tag")
    public void setupB() {
        // more setup
    }

    @Then("^some other step$") {}
}

...

然后,在.feature文件中,您只需使用@tag标记方案。

Feature: Test feature

  @tag
  Scenario: Test scenario with setupB
    ...
    Then some other step

现在,setupB()应仅针对该方案运行。

您还可以在StepDefB内创建一个没有ony钩子的方法,只需在步骤代码中运行该方法:

public void setupB() {
    // more setup
}

然后:

@Then("^some other step$") {
    setupB();
}

希望你能让它发挥作用。