如何在每个JBehave故事之前重新实例化我的Steps类?

时间:2017-10-18 15:41:23

标签: jbehave

我的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课程的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

@BeforeStory解决了这个问题。对我来说至少足够好。它没有重新实现Steps类,但至少为您提供了一个可以重置内部状态的钩子。赞美归于Bill Hileman

public class Steps {

    private Response response;

    @BeforeStory
    public void resetContext() {
        response = null;
    }