不同类别之间的黄瓜BDD共享变量

时间:2019-07-04 15:10:30

标签: dependency-injection cucumber-jvm cucumber-java cucumber-junit picocontainer

我有步骤定义,比如说ClassA和ClassB,当我在ClassB中要使用ClassA中定义的变量时。

Background:
Given Test environment is DEV
Then We get product info

ClassA()

Environment environment;//Enum like DEV("23.556.444.55", "44.555.666.77")

@Given("^Test environment is (.*)$")
public void setEnv(String name) {
//here i should define Env var (Enum)
environment = EnumClass.getEnvironment(name)

}

ClassB() {

@Then("^Then We get product info$")
public void getProdDetails() {
//Use here "environment" value defined in ClassA
}
}

我怎么做到这一点,我相信引入任何静态方法都不是一个好方法。

我意识到ClassB应该具有依赖性ClassA,因此应该将构造函数注入ClassA作为参数传递给ClassB,但是将如何注入具有定义值的“环境”字段?

非常感谢您的提示

1 个答案:

答案 0 :(得分:0)

通过合并ThreadLocal()来解决,例如

public class TestExecutionContextHolder {

private TestExecutionContextHolder contextLocal = new ThreadLocal<TestExecutionContext>();

public TestExecutionContext getContext() {
      TestExecutionContext context = contextLocal.get();

     // checking if context is null then new TestExecutionContext(), contextLocal.set(context)

} 
      //add void releaseContext()
}

然后,Step Def类扩展了一些我们可以在其中获取Context()的类