我正在使用@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,因为正在运行的步骤在该文件中。有办法解决这个问题吗?
答案 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();
}
希望你能让它发挥作用。