【发布时间】:2015-12-24 08:56:29
【问题描述】:
我有一个变量,我想在所有步骤中传递这个变量。 任何人都可以通过代码 sn-p 示例建议如何在步骤之间传递变量值。 任何帮助将不胜感激。
【问题讨论】:
标签: cucumber cucumber-jvm cucumber-junit meteor-cucumber
我有一个变量,我想在所有步骤中传递这个变量。 任何人都可以通过代码 sn-p 示例建议如何在步骤之间传递变量值。 任何帮助将不胜感激。
【问题讨论】:
标签: cucumber cucumber-jvm cucumber-junit meteor-cucumber
在 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 容器将确保为 each 场景创建一个 MySharedData 的单个实例,并将其传递给 every 需要的步骤定义类它。这种方法的好处是 Cucumber 确保场景之间没有共享状态泄漏,因为注入的依赖项是为每个场景重新创建的。
上面的例子使用了构造函数注入(所以注入的依赖是由构造函数参数指定的)但是其他的DI容器也支持其他的注入机制,比如Spring的@Autowired。
要让 Cucumber 使用 DI,您需要选择一个(并且只有一个)DI 集成并将其包含在您的类路径(或您的 POM)中。选择是:
您还需要安装所选的 DI 容器本身,因为 Cucumber jar 仅提供 Cucumber 和 DI 容器之间的集成。
【讨论】:
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));
}
【讨论】: