您可以同时使用@Given和@And吗?

时间:2019-11-08 15:03:49

标签: java cucumber gherkin

我有几个共享“步骤定义”的测试。例如:

Scenario: test1
  Given that the sky is blue
  And that the sun is up
  When I go outside
  Then I might get a sunburn

Scenario: test2
  Given that the sun is up
  When I go outside
  Then it will be light

“使太阳升起”和“使太阳升起”这两个步骤在实现上是相同的。

我想要的是

@And("that the sun is up")
@Given("that the sun is up")
public void thatTheSunIsUp() {
    // Do some fancy and sunny things.
}

不幸的是,这不起作用。如何在没有相同步骤的重复方法的情况下实现相同目标?

3 个答案:

答案 0 :(得分:3)

黄瓜中的每一步都定义为GivenWhenThen,但实际上它更像是:

// ENTER PSUEDOCODE
@Step("that the sun is up")
public void thatTheSunIsUp() {
    // Do some fancy and sunny things.
}

关键字是可互换的,因此可以根据上下文是先决条件(Given)是被测操作(When)还是结果(Then)。

按照最初的定义(没有重复的@And部分),您将可以使用GivenWhenThenAnd ,功能文件中的But*作为关键字,黄瓜的后端应与您的步骤相匹配,但定义所用的内容应与它的预期用途相匹配(如上段所述)

答案 1 :(得分:2)

您不能在黄瓜中用相同的文本两次注释相同的方法。但是,您可以在功能文件中使用And调用以@Given注释的方法。

因此,要么删除@And批注,要么在一种情况下更改文本。

答案 2 :(得分:0)

但是我不认为你可以

您反对使用@Repeatable函数吗?

我的理解是,您可以再次将@Given与Java8 +中的@Repeatable结合使用。