BDD:明确的例子 - 适当的代词?

时间:2012-10-10 15:37:16

标签: cucumber bdd gherkin scenarios

在编写场景时,是否有人有选择下列其中一种风格的强烈论据?

Feature: Search Product

As a customer
I want to search for a product
So that I can easily locate what I want to purchase

Scenario: Multiple Products Found (First Person Style)
Given the following products exist:
|Product      |
|Normal Orange|
|Large Orange |
When I search for "orange" <---
Then the system should display the following products:
|Product      |
|Normal Orange|
|Large Orange |

或者...

Scenario: Multiple Products Found (Generic Third Person Style)
Given the following products exist:
|Product      |
|Normal Orange|
|Large Orange |
When the customer searches for "orange" <---
Then the system should display the following products:
|Product      |
|Normal Orange|
|Large Orange |

或者...

Scenario: Multiple Products Found (Specific Person Style)
Given the following products exist:
|Product      |
|Normal Orange|
|Large Orange |
When "John" searches for "orange" <---
Then the system should display the following products:
|Product      |
|Normal Orange|
|Large Orange |

它们似乎都运行得很好 - 我想知道我是否错过了一个明显的陷阱,因为很多例子似乎都使用了演员的特定值(而不仅仅是输入/结果的特定值)。

我反对使用的唯一理由:

When the customer searches for "orange"

如果其他actor也可以使用相同的函数,则必须定义单独的等效步骤。

就个人而言,我认为“我”阅读得很好(尽管我觉得我不知道)。想法?

3 个答案:

答案 0 :(得分:3)

无论哪种方式都很好,但存在细微差别。

如果结果的好处是针对用户,我有时喜欢在第一人称内容,如果是针对用户以外的其他人,则我会喜欢第三人称。

例如,你可能有一个故事:

In order to prevent bots from spamming the site
As a moderator
I want users to prove that they are human.

关联的方案可能是:

Given a user is not registered
When they try to register
Then they should be presented with a CAPTCHA
When they fill in the CAPTCHA
Then they should be successfully registered

或者:

Given I am not registered
When I try to register
Then I should be presented... what, wait, no, I shouldn't!

在这种情况下,显而易见的是,与“我应该被赠送CAPTCHA”的想法存在认知上的脱节,因为它们很烦人,没有人想要它们。将这种情况置于第三人称后,显然可能不会为该人带来好处。

我偶尔会为用户编制名称 - 例如,普通用户的Ursula Usual和管理员的Andy Admin。以这种方式使用第三人也可以用于调出不同的角色和角色。

在其他情况下,角色是相同的,但有两个不同的人在玩它。

Given Doctor Donald has filled out Priscilla Patient's prescriptions
When Doctor Diana looks for her file // <-- different doctor!
Then she should be able to find those prescriptions.

在其他actor可以使用相同功能的情况下,其角色或权限的上下文将改变行为,并且该上下文仍应包含在场景中,即使它只是隐含在其名称中。 / p>

答案 1 :(得分:2)

我认为只要故事对于开发人员和非开发人员都很清楚,我认为I可以使用。在顶部,您已经澄清Icustomer。我认为我们并不关心哪个特定客户正在进行搜索。

答案 2 :(得分:1)

我认为这主要取决于情景。

如果场景只涉及客户,那么“客户”可能是最合适的。

如果一个场景可能涉及除客户以外的用户类,则使用“John”(或“Jane”,如果您愿意)更通用,并且只关注一类用户。

一般来说,系统正在建立供其他人使用,所以虽然我同意第一人称(“我”)的风格很好,但不使用它可能有很好的心理原因。

当然,我可能完全糊涂了 - 我对BDD很新。