我的JBehave执行程序扩展JUnitStories
以加载和运行多个.story
文件。它覆盖了整个网络中许多示例中所见的stepsFactory
方法:
public class JBehaveTest extends JUnitStories {
@Override
public InjectableStepsFactory stepsFactory() {
return new InstanceStepsFactory(configuration(), new MySteps());
}
MySteps
是一个POJO,它实现了@Given,@ When,@Then带注释的步骤方法。它保持内部成员的状态,以跟踪在何时能够在Then中正确断言所发生的事情。例如:
public class Steps {
private Response response;
@When("I post this and that")
public void whenIPostThisAndThat() {
this.response = sendRestRequest();
}
@Then("I get an OK response")
public void thenIGetAnOKResponse() {
assertThat(response.httpStatus).isEqualTo("200");
}
在设计时,我曾期望JBehave在开始下一个故事之前重新MySteps
,因此状态会被重置。不幸的是,这不会发生。在运行所有故事之前,stepsFactory
方法只调用一次,InstanceStepsFactory
使所有故事中的MySteps
实例保持活动状态。结果我从一个故事到另一个故事都会出现遗留错误。
在下一个故事发布之前,强制JBehave重新安排MySteps
课程的最佳方法是什么?
答案 0 :(得分:0)
@BeforeStory
解决了这个问题。对我来说至少足够好。它没有重新实现Steps
类,但至少为您提供了一个可以重置内部状态的钩子。赞美归于Bill Hileman:
public class Steps {
private Response response;
@BeforeStory
public void resetContext() {
response = null;
}