RSpec vs黄瓜(RSpec的故事)
什么时候应该使用Rails应用程序的规格,以及何时使用Cucumber(以前的rspec-stories)? 当然,我知道如何运作和积极使用规格。 但是使用黄瓜仍然感到不可思议。 我目前的观点是,当你为客户实施应用程序时,使用Cucumber是很方便的,而不知道整个系统应该如何工作。
但是如果我正在做我自己的项目呢? 在大多数情况下,我知道系统的各个部分是如何相互作用的。 我所要做的就是写一堆unit testing。 那么当我需要黄瓜的时候,可能的情况是什么?
而且,作为相应的第二个问题:如果我写黄瓜故事,是否必须写规格? 难道不是同一件事情的双重testing吗?
如果你还没有,你可能想看看丹北的优秀文章, 什么是故事? 作为一个起点。
我们有两个黄瓜故事的主要用途。 首先,因为故事forms非常具体,所以有助于将产品所有者的特征集中在他想要构build的特征上。 这是“对话的象征”使用故事,无论我们是否用代码实现故事,这都是有价值的。 其次,当我们开始写作这个特征之前 ,当这个过程工作的很好以至于我们有了完整的故事(更多的是我们追求的理想,而不是每天的现实),你的接受标准清楚地说明了,你确切知道什么和怎样要build立很多。
在我们的Rails工作中,黄瓜故事不能替代rspecunit testing。 二者并驾齐驱。 在实践中,unit testing倾向于推动模型和控制器的发展,这些故事倾向于推动视图的发展(我们倾向于不为我们的观点编写rspec),并从整体上提供对应用程序的良好testing用户的angular度。
如果你正在单独工作,沟通方面可能不是你感兴趣的,但是你从Cucumber获得的集成testing可能是。 如果你利用webrat ,写黄瓜可以快速和无痛的很多你的基本function。
把它想象成一个循环:
编写你的Cucumber特性,然后在开发该特性的部分时,编写规范来完成各个组件。 继续完成规格,直到您为function写入足够的function,然后编写下一个function。
我的看法是,在大多数情况下使用黄瓜是一个坏主意,因为它的语法会导致生产力的降低。 我在“ 为什么要考虑黄瓜testing”这个话题上写了大量的文章?
一个黄瓜故事更多的是描述你的应用程序正在解决的整体问题,而不是如果单个代码工作(即unit testing)。
正如Abie所描述的,这几乎是应用程序需要满足的一系列要求,对于与客户进行沟通以及直接进行testing非常有帮助。
现在你可以使用rspec与水豚和Selenium Webdriver,并避免必须build立和维护所有的黄瓜故事parsing器。 这是我会build议的:
- 写出你的故事
- 使用RSpec,我会创build一个集成testing,例如:spec / integrations / socks_rspec.rb
- 然后,我将创build一个集成testing,其中包含一个新的描述和它为每个情况块
- 然后,我将实现最小的function要求,以获得集成testing,并深入回到(控制器和模型等),我会在控制器和模型的TDD。
- 当您回来时,您的集成testing应该通过,您可以继续向集成testing添加步骤
- 重复
但是有一点需要注意的是,控制器和集成testing有可能不必要的重叠,所以你必须使用你的最佳判断,所以你不会浪费你的时间。
另外,一旦你发现你的凹槽,你会发现使用BDD开发最愉快的,直到那时,如果你不觉得自己做得完美,不要觉得有罪, 你会做得很好!
但是如果我正在做我自己的项目呢? 在大多数情况下,我知道系统的各个部分是如何相互作用的。 我所要做的就是写一堆unit testing。 那么当我需要黄瓜的时候,可能的情况是什么?
你还需要黄瓜。 您需要它来logging您如何看待系统工作,并且您需要它来确保您在更改内容时没有损坏function。
换句话说,因为需要unit testing,所以需要使用黄瓜故事 – 他们只是在更高的抽象层次上工作。