2012-04-16 66 views
3

我需要编写一个类来强制执行有关可能会或可能不会添加到仓库中相同容器的项目的规则,并且我希望在实现它之前将要求转换为Cucumber。每件商品有几个属性,例如“商品系列”(例如:电子产品,书籍),“商品状态”(例如:主要库存,缺货库存)和“批次”(例如:1050,1051)。哪里摘要Cucumber步骤正确?

我能想到的几个策略编写黄瓜测试这一点,我想知道这是建议的一个:

首先,你可以列举所有单位产品的属性:

Given I have a tote containing: 
    | sku | client | family | status | batch | weight | 
    | 100000 | Foo  | garment | main | 1234 |  10 | 
When I add the item: 
    | sku | client | family | status | batch | weight | 
    | 200000 | Bar  | garment | main | 1234 |  10 | 
Then I should be told there is a Client conflict 

其次,你可以有一个基本的产品硬编码,并尝试指定最小从它不同的属性:

Given I have a tote containing an item that's client "Foo" 
When I add an item that's client "Bar" 
Then I should be told there is a Client conflict 

这是假定DEF步骤initions包含基本属性,并在步骤中提及属性时覆盖它们。

最后,你可以去抽象的另一步骤:在这里正确的做法

Given I have a tote containing an item 
And I add an item with a different client 
Then I should be told there's a client conflict 

任何指导意见?

回答

1

The Cucumber Book的答案将取决于您的团队中非技术人员最易读的内容。与QA领导和项目经理坐下来,问他们同样的问题。我有一个类似的问题,并从第一个建议开始。然后我认定它太详细了,跳到#3。然后,我和项目经理坐下来,发现当我创建数据时,我不需要任何细节,但是当我们更改数据(在我们的案例中更新发票上的行项目值)时,我们希望看到那些值在步骤中。

第6章从The Cucumber Book“当黄瓜坏了”对于指导正确的细节水平确实有帮助。我真的认为你应该给它一个阅读,尤其是关于提出一个无处不在的语言的部分。我认为这将帮助您决定组织的正确详细程度。

如果您想要使用第一个测试,我的问题就是“您多久会改变一次这些值?”如果答案是“不是很”或“从不”,那么你应该考虑他们是否增加或减损了测试的可读性。

P.S.我仍然在阅读The Cucumber Book,但到目前为止,它已经非常有帮助,例如像socjopata建议的那样指向FactoryGirl。

1

提到的第一个选项是最灵活和可重用的选项。采用第一种方法,基本上可以涵盖您可能需要的任何情况,但也有一些缺点,您会在下面阅读。

第二个和第三个选项更容易阅读,这也是编写测试时的一个重要因素。此外,似乎专注于实际测试的内容,即“Foo”和“Bar”似乎在该场景/功能中所产生的主要区别。在编写测试时,这也是首选。

一般来说,imho写作黄瓜测试就像把自己置于一个岩石和一个艰难的地方之间。我注意到开发人员倾向于重用和重复使用黄瓜步骤,难以理解和维护场景。 第二种方法需要更多的工作来定义步骤,但是场景更清晰且更易于阅读......但是它需要更多时间来编写场景以及它会产生大量的步骤定义库,这很难维护。

If you really want Cucumber for bdd那么我会最慷慨的第二选择。只要确保你会使用FactoryGirl或其他类似的东西来创建通用对象,并且只覆盖你一次需要的东西。

我希望你觉得这个很有用。

相关问题