BDD 语句应该如何正确构建?团队中是否使用约定?

How should BDD statements be properly constructed? Is there a convention used in teams?

是否有在小型敏捷团队和社区中创建 BDD 场景的首选方法?我正在使用小胡瓜,它在 https://courgette-testing.com/bdd

上给出了一个示例
Scenario: Refunded items should be returned to stock
  Given a customer previously bought a black sweater from me
  And I have three black sweaters in stock.
  When they return the black sweater for a refund
  Then I should have four black sweaters in stock.

这听起来是个好主意吗?这对团队沟通是否有效?

我已经使用了他们的网络步骤位,现在正在重构位以让业务清楚。

任何链接都会有所帮助。谢谢

BDD 中的对话比工具更重要。与其从 Courgette 示例中的 finely-grained 规范开始,不如先尝试与企业交谈。向他们询问他们想要的行为类型的示例。

当你写下来的时候,先按照他们描述的方式来写。令人惊讶的是,很少有人会正确地倾听!在你从他们那里得到例子后,看看它。你能看出哪些位是上下文 (Givens),哪些是结果 (Thens)?哪个步骤与触发您感兴趣的行为相关(何时)?

一旦你解决了这个问题,我还想问几个问题:

  • 对于同一事件,是否有任何其他上下文给出不同的结果?
  • 还有其他重要的结果吗?

例如,如果我正在为一家大型超市实施此行为,我可能会遇到这样的示例:

"Oh! No, don't add food back to stock. We don't know how it's been stored. We refund it if there's something wrong with it, but we bin it."

您可能会看到这会如何改变您的代码!

测试人员非常擅长提出这些问题并发现缺失的场景!这将我们引向 "Three Amigos" 模式。我喜欢包括:

  • 业务人员、产品负责人、主题专家或遇到问题的人
  • 测试人员
  • 一个开发者(或一对开发者)。

您还可以包括 UI 设计师、技术作家等。- Matt Wynne 说是 "Three Amigos where three is a number between 3 and 7"。

我真的很喜欢开发人员以允许他们到达 "Given, When, Then" 的任何形式写下场景。有时我会在会议上这样做;有时我稍后再做,然后展示或发送给我的业务人员。

Courgette 的例子通常发生在人们没有这些对话的时候。如果您从对话开始,您更有可能得到与上述内容相符的内容。这些声明性步骤不仅更易于业务阅读和整个团队讨论,而且它们也更易于维护,因为它们如何实现的细节是隐藏的(通常在步骤定义中,进一步在页面中Objects).

这里有各种对 BDD 新手有用的帖子on my blog如果你想了解更多!