为什么jBehave中的复合步骤不会先执行前置条件?

时间:2017-05-02 06:30:04

标签: java jbehave

我正在使用JBehave自动化我的Web应用程序,我面临以下问题。

我创建了一个包含所有前置条件的复合步骤。当我运行这些步骤时,它首先执行复合步骤中的内容而不是先运行前置条件..

如何使用复合步骤顺序运行测试。请指教。

以下是我的步骤文件代码。

@Given("I see given step")
    public void given()
    {
        System.out.println("Inside GIVEN");
    }

    @Then("I see then step")
    public void when()
    {
        System.out.println("Inside WHEN");
    }

    @Then("I see when step")
    public void then()
    {
        System.out.println("Inside THEN");
    }

    @Given("I see composite step")
    @Composite(steps={"Given I see given step","Then I see then step","When I see when step"})
    public void composite()
    {
        System.out.println("Inside COMPOSITE");
    }

当我运行“鉴于我看到复合步骤”时,复合函数内部的sysout首先运行..我需要先执行前置条件。

谢谢!

2 个答案:

答案 0 :(得分:1)

@Composite内部的步骤并不意味着实现@ Composite-Annotated-Method ...的前提...

如果您对基于场景/故事的前提感到满意,可以考虑使用JBehave Lifecycle

如果您需要以步骤为基础的前提条件(如您所说),我会通过添加第4个JBehave步骤来伪造它,这在您的@Composite块中称为最后一个。

给出您的示例:

    @Given("I see given step")
    public void given()
    {
        System.out.println("Inside GIVEN");
    }

    @When("I see when step")
    public void then()
    {
        System.out.println("Inside THEN");
    }

    @Then("I see then step")
    public void when()
    {
        System.out.println("Inside WHEN");
    }

    @Then("your step executed last")
    public void then()
    {
        // logic from composite()
        System.out.println("Inside COMPOSITE");
    }

    @Given("I see composite step")
    @Composite(steps={"Given I see given step","When I see when step","Then I see then step","Then your step executed last"})
    public void composite()
    {
         //logic got moved
    }

答案 1 :(得分:0)

如果你试图嵌套步骤,我相当肯定JBehave从未设计过来处理那种情况。你的代码中有一个小错字,你有" @ then"两次步骤,一次说"何时。"但是我得到了你想做的事(我想)。

你应该将详细的,多步骤的步骤放在同一个@ Given / @ When / @ Then / @ And步骤中。没有规则说每个步骤只应包含一行代码,但显然只应包含一个复合步骤。

希望这会有所帮助。如果没有,请更详细地解释你想要完成什么,最好是用现实生活中的例子。