2017-10-18 57 views
0

我的JBehave執行程序擴展JUnitStories以加載並運行幾個.story文件。它覆蓋stepsFactory方法在整個幅材見於許多例子:如何在每個JBehave故事之前重新實現我的Steps課程?

public class JBehaveTest extends JUnitStories { 

    @Override 
    public InjectableStepsFactory stepsFactory() { 
     return new InstanceStepsFactory(configuration(), new MySteps()); 
    } 

MySteps是實現@Given,@When,@Then註釋步驟方法POJO。它保持內部成員的狀態以便跟蹤發生什麼時候能夠在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

使用@BeforeStories和/或@BeforeStory等註釋嗎? –

回答

0

@BeforeStory解決了它。至少對我來說足夠好。它不會重新實例化Steps類,但至少會爲您提供一個掛鉤,您可以在其中重置內部狀態。好評如下:Bill Hileman

public class Steps { 

    private Response response; 

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

很高興能幫到你。 –

相關問題