her*_*ung 4 java spring multithreading jbehave
目前,我正在使用 Spring 将步骤类注入到 JUnit 测试中:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration...
class MyTest extends JUnitStories {
@Autowired private MySteps mySteps;
public List<CandidateSteps> candidateSteps() {
return new InstanceStepsFactory(configuration(), mySteps).createCandidateSteps();
}
...
}
Run Code Online (Sandbox Code Playgroud)
我想使用多个线程运行 JBehave,因此我无法再注入单例 MySteps bean。
我已阅读http://jira.codehaus.org/browse/JBEHAVE-492,但仍然不知道如何解决我的问题。
很久以前就有人问过这个问题,但答案是:仅在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();
}
}
Run Code Online (Sandbox Code Playgroud)
以及步骤
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我建议您在场景清除变量之前进行一些操作,以防止不同场景之间发生任何类型的泄漏。
| 归档时间: |
|
| 查看次数: |
2063 次 |
| 最近记录: |