Given, When, Then (Given, When, Then, When, Then) 的黄瓜排序

Cucumber ordering of Given, When, Then (Given, When, Then, When, Then)

作为端到端自动化测试人员,我一直认为 Given、When、Then 语句(在使用 Cucumber 时并入 Gherkin 语言中)应该只以 1.Given、2.When 的顺序出现, 3. 然后.

即测试不应遵循,例如,Given、When、Then、When、Then。相反,应该仅遵循 Given、When、Then。

此假设的原因是单个测试仅测试应用程序的一个区域。

但是,我注意到网络上的一些小黄瓜示例有时会使用以下顺序:Given、When、Then、When、Then。

有谁知道在写完 Then 之后回到 Whens 是否是可以接受的最佳实践?我感谢测试仍然有效,只是想知道这是好事还是坏事。

虽然场景可以这样写,但这不是最佳实践。就我个人而言,我犯了那个错误,它可能会导致报告和维护出现问题。

一个原因是 When 声明了一个动作并且 Then 验证了该动作的结果。有 When - Then 两次违背了场景的个体行为。

阅读该场景的人也会感到困惑 :)

这里有一点 post 关于这个

网上有很多非常糟糕的小黄瓜。关于什么是好的小黄瓜也有很多意见。

我认为 When Then When Then 是一种反模式。可能需要以下其中一项

  1. 你需要一个更好的 Given 来合并第一个 When Then

  1. 您需要将场景一分为二。

一般情况下,当您在现有行为的基础上定义和创建新行为时,场景中的大多数时间都会成为以后场景中的既定时间。

句法可互换;语言不同

Gherkin syntax目前包含六个描述特征步骤的关键词:

  1. Given
  2. When
  3. Then
  4. And
  5. But
  6. *

关键词是为了人类消费和传达业务逻辑的便利。但是,Gherkin 语言本身将关键字视为可互换的符号,因此您可以在语法上(从 Gherkin 的角度)像这样写出折磨人的英语:

But for a dollar held
Then another dollar more
Given ownership of two dollars am I.

这是完全正确的小黄瓜,但数钱的表现很糟糕。那么,如果所有的词都可以互换,为什么会有这么多词呢? wiki 很清楚,他们提供了一套约定俗成的方式来促进更自然的交流,wiki 甚至还给出了几个例子来说明单词是如何区分的。 wiki还专门说:

Cucumber doesn’t technically distinguish between these...[kinds] of steps. However, we strongly recommend that you do! These words have been carefully selected for their purpose, and you should know what the purpose is to get into the BDD mindset.

换句话说,使用 Gherkin 术语以(相对)自然的语言交流您的功能,并将奥秘隐藏在步骤定义中。使用任何最适合语言流的关键字,并且不要为没有严格遵守可能不适用于所有情况的 约定 的精心编写的场景而烦恼。