通过一个实际的例子来理解BDD

时间:2012-09-27 12:00:54

标签: ruby-on-rails testing tdd cucumber bdd

我正在尝试加入行为驱动的开发方法,但要使用它我需要了解如何以这种方式思考。

我想在我刚开始的一个新的个人项目上测试它(我将使用RoR)

该项目将提供API以从外部应用程序收集数据,它将提供一个身份验证系统(设计),几个模型以根据需要收集数据,以及一个支付系统来购买订阅,这将提供一些仅限高级功能。< / p>

为了涵盖所有这些功能,我应该进行哪种测试,但是DRY?

我以为我应该同时使用RSpec和Cucumber。对于Devise,我会按照他们网站上的文档进行操作,但我不清楚我应该执行哪种测试来检查数据是否已正确收集并正确显示给用户以及哪些工具用于该任务。另外,如果你能提供一个简单的例子,你将如何组织测试和开发这种项目将有所帮助(我不是在询问真正的测试代码 - 因为我看到它真的取决于实现 - 但是关于开发过程和您将执行的各种测试)。如果您需要更多细节可供选择,请让我知道并随意发明它,因为它是出于教育目的。

3 个答案:

答案 0 :(得分:8)

我认为没有人会因为沟通的全部内容而提及BDD。所以我会成为那个人:这都是关于沟通的!真正的价值在于与不同的利益相关者以可访问的术语探索功能,以确定系统需要透明地完成的工作。每个人都说同一种语言,沟通目标要容易得多。当涉及到实施时,开发人员知道他们正在做什么,利益相关者知道他们正在做什么,不应该有太多的惊喜(除了你错过/捕获错误/未实现的事情,也许)。

所以,走出去,与你的利益相关者交谈,找出调试系统想要的人。如果这是一个单独的努力,你将需要戴上一些不同的帽子。

您的BDD测试将涵盖系统的行为 - 所需功能的单元。你仍然需要进行单元测试等 - 没有变化。

作为产品所有者,请考虑您希望系统做什么 - 而不是 。只要它们起作用,你可能不关心事情是如何运作的。如果您是开发人员,这可能是思维方式的艰难转变。当我第一次开始研究BDD时,我确信在场景中浏览UI旅程和技术细节等是有意义的。它没有。那些东西属于步骤定义。作为开发人员,您可以在那里定义所有 how 的内容。

至于保持干燥......为了捕获所需的行为,请准确地编写您的场景。然后,您可以担心重构和识别步骤重用的机会。在某种程度上,使用正则表达式也会有所帮助。超级强制性并且拥有一整套可重复使用的步骤是很诱人的,但是你可能会意识到,当一个步骤的变化在你的所有场景中涟漪时,它们都非常脆弱,而不仅仅是它应该的那个场景。影响。如果您对任何形式的Web自动化感兴趣,请查看Web自动化金字塔。

有用的资源(以及大量示例):

http://books.openlibra.com/pdf/cuke4ninja-2011-03-16.pdf&lt;很棒的免费电子书 - 也很有趣。

http://www.slideshare.net/lunivore/behavior-driven-development-11754474&lt;丽兹真的很了解她的东西!

http://dannorth.net/2011/01/31/whose-domain-is-it-anyway/

https://www.google.co.uk/search?q=declarative+vs+imperative+BDD&lt;去团队声明!

答案 1 :(得分:1)

我不确定这是否符合您的确切要求,但这就是我做BDD的方式(例如是一个webapp):

假装您作为应用程序的用户坐在电脑前。记下为实现其中一个用例而需要执行的步骤,例如:

导航到系统的网址 登录 选择您需要的功能 输入相关数据以执行该功能 单击按钮以启动该功能 等待系统响应 确保屏幕上的数据与您期望的数据相符。

如果其中任何步骤无法执行,或者数据不正确,则测试失败。

在测试文件中有了这个,然后使用Gherkin / Cucumber / Webdriver来实现执行每个步骤所需的代码。每种方法都可以重复使用,所以一旦你在一个地方实施了登录,它就可以在你调用它的任何地方工作。

答案 2 :(得分:-1)

用黄瓜或rspec测试设计试试这个

看到这个 - cucumber/rspecon github