【问题标题】:Why Composite steps in jBehave doesn't execute pre-conditions first?为什么 jBehave 中的复合步骤不首先执行前置条件?
【发布时间】:2018-12-06 19:41:49
【问题描述】:

我正在使用 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 首先运行。我需要先执行前置条件。

谢谢!

【问题讨论】:

    标签: java jbehave


    【解决方案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
        }
    

    【讨论】:

      【解决方案2】:

      如果您尝试嵌套步骤,我相当肯定 JBehave 从未设计用于处理这种情况。无论如何,你的代码中有一个小错字,你有两次“@then”步骤,一个说它在“when”中。但我明白你想要做什么(我想)。

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

      希望这会有所帮助。如果不是,请更详细地说明您要完成的工作,最好是用一个真实的例子。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-30
        • 1970-01-01
        • 1970-01-01
        • 2020-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多