目前,我正在使用Spring将步骤类注入JUnit测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration...
class MyTest extends JUnitStories {
@Autowired private MySteps mySteps;
public List<CandidateSteps> candidateSteps() {
return new InstanceStepsFactory(configuration(), mySteps).createCandidateSteps();
}
...
}
我想运行JBehave with multiple threads,所以我不能再注入一个单独的MySteps bean了。
我已阅读http://jira.codehaus.org/browse/JBEHAVE-492,但仍无法看到如何解决我的问题。
答案 0 :(得分:4)
这是很久以前的问题,但答案是:只在ThreadLocal个变量中保持状态,或者更好地将ThreadLocal变量包装在你自己的一个类中。例如,请使用此代码
州级
public class State {
private ThreadLocal<String> state;
public void setState(String state) {
this.state.set(state);
}
public String getState() {
return this.state.get();
}
}
步骤
public class Steps {
private State state;
public Steps(State state) {
this.state = state;
}
@Given("the following happens: $string")
public void somethingHappens(String string) {
state.setState(string);
}
@When("who knows")
public void whoKnows() {
String stat = state.getState();
}
@BeforeScenario
public void cleanup() {
state.setState(null);
}
}
我建议你在方案清除变量之前先做一些事情,以防止不同场景之间发生任何泄密。