场景大纲:具有有限数量的可能值的占位符

时间:2012-02-06 16:55:29

标签: bdd gherkin

我对BDD比较陌生,我对场景概述有疑问。通过互联网查看样本时,我感觉占位符可以采用任何值。其域中的元素数量不受限制。 Here就是一个例子:

Scenario Outline: eating
  Given there are <start> cucumbers
  When I eat <eat> cucumbers
  Then I should have <left> cucumbers

  Examples:
    | start | eat | left |
    |  12   |  5  |  7   |
    |  20   |  5  |  15  |

占位符<start>例如可以是任意数字,因此值的数量是无限的。

在我的规范中,我必须处理可能具有四种状态之一(计划,持续,暂停和关闭)的合同。我的规格说我可以编辑计划合同,但我不允许编辑其余三个州之一的合同。

我想我会写一个名为“更新计划合同”的方案和一个方案大纲,其中合同的状态是占位符。

Scenario: Update a planned contract
  Given the list of contracts as follows
    | name | status  | some value |
    | c1   | planned | 123        |
  And I have edited contract c1 as follows
    | field      | value |
    | name       | c1    |
    | some value | 456   |
  When I save contract c1
  Then the list of contracts should be as follows
    | name | status  | some value |
    | c1   | planned | 456        |

Scenario Outline: Update contract
  Given there is a <status> contract
  And I have edited that contract
  When I save that contract
  Then I an error 'only planned contracts are allowed to change' should be displayed

  Examples:
    | status  |
    | ongoing |
    | paused  |
    | closed  |

这是正确的方法吗?一个expicit场景和一个参数化?或者我应该将场景大纲编写为每种可能性的明确场景?我不确定,因为合同的状态受到四个可能值的限制,而不是互联网上的例子。

1 个答案:

答案 0 :(得分:1)

我发现有一点有用,就是要记住Gherkin只是Example by Example的语法。您正尝试使用业务领域语言提供对您最有意义的示例。

因此,您提出的建议完全有效。您有一个场景示例,它使用表来定义编辑计划合同时会发生什么,以及另一组在其他状态下合同时产生错误的示例。您也可以通过扩展每个州的大纲来明确地做到这一点。两者都是有效的,您可以像代码库一样重构功能分类。

您打算在这里做的是提供语法,框架,语言,按照您的意愿调用,您可以使用它与您的业务分析师进行对话。您希望能够提取此文档并说“这是系统现在的工作方式,我们如何更改它以使其支持您的新功能?”。

就个人而言,我现在正在避免在我的功能中使用表格和大纲形式,因为我希望尽可能地让它看起来尽可能友好,而且我的功能仍然很容易描述。