我是Cucumber(jvm)的新手,一切似乎都很好,但是:

我真的不知道如何通过一种方法(优雅地)以多种方式(在各种情况下)编写多个初始条件。

例如:

Scenario: I really am bad
    Given I really am inexperienced with Cucumber
    When I try to work
    Then what I produce is of poor quality

Scenario: I am on the way to become good (hopefully)
    Given I am a noob
    When I learn new things
    And I practice
    Then my level improves

由于Given I really am inexperienced with CucumberGiven I am a cuke noob(尽管在语义上不是相同的)足够接近,因此我可以以完全相同的方式实现,因此我希望能够将它们链接到相同的方法,但是

@Given("^I really am inexperienced with Cucumber$")
@Given("^I am a cuke noob$")
public void checkMyLevelIsGenerallyLow() throws Throwable {
    // some very clever code to assess then confirm my mediocre level ... something like if(true) ...
}

但是由于cucumber.api.java.en.@Given批注不是java.lang.annotation.@Repeatable,因此上述代码无法编译。

一个简单的解决方案是做类似的事情

public void checkMyLevelIsGenerallyLow() throws Throwable {
    // some very clever code to assess then confirm my mediocre level ... something like if(true) ...
}

@Given("^I really am inexperienced with Cucumber$")
public void check_I_really_am_inexperienced_with_Cucumber() throws Throwable {
    checkMyLevelIsGenerallyLow();
}

@Given("^I am a cuke noob$")
public void check_I_am_a_cuke_noob() throws Throwable {
    checkMyLevelIsGenerallyLow();
}

可以正常工作,但需要很多代码来完成简单的事情,我很确定还有其他方法。

甚至,当我问自己写下这个问题时,“我是从右边简单地解决这个问题吗?”,就BDD而言,我是否正在尝试实现一个好主意?

我认为这并不全是坏事,因为小 cucumber 被认为具有语义和句子结构,而词汇选择则取决于上下文(因此场景)。但是我应该以自己喜欢的任何方式自由执行它。

因此,将其全部包装起来:
  • @Given应该是@Repeatable吗?
  • 如果是这样,为什么不呢?还有另一种方法吗?
  • 如果没有,我在方法上缺少什么?
  • 最佳答案

    关于多表达@given

    这可能不是最好的方法,但是我想到了这一点:

    @Given("^I really am inexperienced with Cucumber$|^I am a cuke noob$")
    public void checkMyLevelIsGenerallyLow() throws Throwable {
        // some very clever code to assess then confirm my mediocre level ... something like if(true) ...
    }
    

    而且有效!
    这正是我在寻找的东西,甚至可以使它更具可读性,如下所示:

    @Given("^I really am inexperienced with Cucumber$"+
          "|^I am a cuke noob$")
    

    关于@given的不可重复性

    正如blalasaadri所说,@Given可能是@Repeatable,但仅来自Java8,而且由于@Repeatable是在Java8中引入的。

    特别感谢

    对于让我记住Ceiling Gecko的人来说,最简单,最明显的解决方案通常是最好,最优雅的解决方案。

    10-06 09:19