我有一个变量,我希望在所有步骤中传递此变量。 任何人都可以建议使用代码片段示例,请参阅如何在步骤之间传递变量值。 任何帮助将受到高度赞赏。
答案 0 :(得分:9)
在Cucumber for Java(cucumber-jvm)中,在步骤之间共享数据的预期方法是使用依赖性集成(DI)容器 - 其中一些已与Cucumber集成。
使用DI的方法因容器而略有不同,但这是使用PicoContainer的示例:
// MySharedData.java
public class MySharedData {
public String stringData;
}
// SomeStepDefs.java
public class SomeStepDefs {
private MySharedData sharedData;
public SomeStepDefs(MySharedData sharedData) {
this.sharedData = sharedData;
}
// StepDefs omitted
}
// MoreStepDefs.java
public class MoreStepDefs {
private MySharedData sharedData;
public MoreStepDefs(MySharedData sharedData) {
this.sharedData = sharedData;
}
// StepDefs omitted
}
DI容器将确保为每个方案创建一个单个实例 MySharedData,并传递给每个步骤定义类,该类需要它。这种方法的好处是Cucumber确保场景之间没有共享状态泄漏,因为为每个场景重新创建注入的依赖项。
上面的示例使用构造函数注入(因此注入的依赖项由构造函数参数指定),但其他DI容器也支持其他注入机制,例如Spring @Autowired
。
要让Cucumber使用DI,您需要选择一个(并且只有一个)DI集成并将其包含在类路径中(或在您的POM中)。选择是:
您还需要安装选定的DI容器本身,因为Cucumber罐子只提供Cucumber和DI容器之间的集成。
答案 1 :(得分:3)
private static String myName = null;
@Given("I have a cucumber step")
public void i_have_a_cucumber_step() throws Throwable {
myName = "Stackoverflow"
}
@Given("^I have (\\d+) (.*) in my basket$")
public void i_have_in_my_basket(int number, String veg) throws Throwable {
System.out.println(myName));
}