我在 BDD 场景中的具体程度如何?

Posted

技术标签:

【中文标题】我在 BDD 场景中的具体程度如何?【英文标题】:How specific do I get in BDD scenarios? 【发布时间】:2012-10-04 03:34:24 【问题描述】:

采取两种不同的方式来说明相同的行为。

选项 A:

Given a customer has 50 items in their shopping cart
When they check out
Then they will receive a 10% discount on their order

选项 B:

Given a customer has a high volume of items in their shopping cart
When they check out
Then they will receive a high volume discount on their order

前者更为具体。如果有人对客户何时获得大量折扣或给他们多少有疑问,阅读此场景会非常清楚。出于记录行为的目的,它尽可能具体,尽管这些值的任何更改都需要更改场景。

第二个更笼统,没有第一个清晰。自动化它需要在步骤实现中合并值“50”和“10”。另一方面,该场景抓住了核心业务需求:大批量客户获得折扣。如果我们稍后决定使用“40”和“15”,则场景不必改变,因为核心业务需求并没有真正改变(尽管步骤实现会改变)。此外,“大批量客户”一词传达了我们为什么要给他们折扣的一些原因。

那么,哪个更好?相反,在什么情况下我应该偏爱前者还是后者?

【问题讨论】:

【参考方案1】:

我想我会选择选项 A。

问题是 BDD 场景必须作为系统的文档。

因此,如果非技术人员想知道您的折扣系统是如何运作的(业务人员、测试人员或客户支持团队的人员),他们肯定想知道拥有大量商品意味着什么,并且应用的折扣是多少。 而且他们不希望必须进入管道代码才能获取此信息。

我认为这些信息很重要,不能对读者隐藏。

另一个好处是它允许非开发人员(例如测试人员)编写新场景并检查如果购物车中有 1 件商品或 100 件商品会发生什么。

当您对事物进行太多抽象时,应用深思熟虑的发现会变得更加困难。 因此,对于选项 B 中的场景,您失去了问自己以下问题的机会:

如果我们有超过 50 件商品(例如 100 件商品)会发生什么情况,还有其他折扣吗 如果我们有 1 件商品会发生什么情况,我们当然不需要折扣,或者我们应该根据购物车的总价格而不是其中的商品数量来应用折扣,只购买一件非常昂贵的商品的人应该还能享受折扣吗? 是 10% 唯一可用的折扣类型,我们是否有例如固定金额的折扣?我们有更复杂的折扣策略吗?

当业务变量可见时,您可以玩弄它们并找出您可能忘记的东西或考虑新的有趣(或不感兴趣)的功能。

作为一般规则,我会隐藏在场景中不重要的内容,在这种情况下,项目数量和应用的折扣值对读者来说确实很重要。

【讨论】:

以上是关于我在 BDD 场景中的具体程度如何?的主要内容,如果未能解决你的问题,请参考以下文章

如何在每个场景之后执行拆除以释放资源在使用黄瓜的宁静BDD中

python behave自动化测试框架- 初探BDD

我们如何处理 BDD 场景的小排列?

从 Python 中的数据学习二元决策图 (BDD)

BDD 测试中的 Moya 存根请求

如何在行为 (BDD) 中查看 print() 语句