您可以在某个步骤中同时使用 @Given 和 @And 吗?

Rob*_*pek 4 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
Run Code Online (Sandbox Code Playgroud)

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

我想要的是这样的:

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

不幸的是这不起作用。我如何才能实现相同的目标,而无需使用相同步骤的重复方法?

Kyl*_*rns 6

Cucumber 中的每一步都被定义为Given,WhenThen,但实际上它更像是:

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

这些关键字是可以互换的,这样可以根据上下文判断它是先决条件 ( Given)、测试中的操作 ( When) 还是结果 ( Then)。

按照您最初的方式定义它(没有重复@And部分),您可以在功能文件中使用Given, When, Then, And,But*作为关键字,并且黄瓜的后端应该与您的步骤匹配,但是您用于定义的内容应该匹配与其预期用途(如上一段所述)