整合与验收测试......什么是黄瓜/牛排?

时间:2010-10-25 23:18:52

标签: ruby-on-rails rspec cucumber integration-testing acceptance-testing

对于我的Rails Web应用程序的集成测试,我使用Steak(类似Cucumber)。 Steak的规格位于名为spec / acceptance的文件夹中。 Steak / Cucumber现在用于集成或验收测试吗?我一直认为这是不同的东西。

1 个答案:

答案 0 :(得分:75)

首先,关于术语的说明:术语集成测试在TDD社区中有点模糊。根据您是来自Java还是Rails(使用Test :: Unit),您可能会理解不同的东西。在Rails中(使用Test :: Unit),集成测试是测试完整堆栈的测试,而功能测试则是测试控制器的测试。 Java社区中的大多数人(至少通过我的观察)会认为这是另一种方式。我个人更喜欢调用端到端测试验收测试,而测试涉及系统的多个层(但不是所有) - 集成测试。总而言之,这完全取决于你所处的文化。

至于黄瓜和牛排 - 两者都是允许称为行为驱动开发(或简称BDD)的开发风格的框架。关键是你有两个级别的测试:

  • 端到端测试,可以测试您的整个堆栈 - 他们模拟浏览器,浏览您的控制器并点击数据库。黄瓜和牛排适合这个利基。
  • 单元测试,它独立测试一小部分功能(通常是单个类,模拟其协作者)。这是RSpec适合的地方。

在BDD中,你从一个失败的端到端测试开始(熟悉地称为“大档”),然后你开始用RSpec(“低档”)开始实现功能测试,直到你得到端到端的测试通过。通过这种方式,端到端测试正在推动您的单元测试,从而推动您的实施。主要好处是避免范围蔓延 - 您最终不会实现您不需要的用户可见功能(因为您没有为其编写端到端测试)。

如果你想了解更多相关信息,我听说Behavior Driven Development Wikipedia article非常好。此外,RSpec书。

因此,Cucumber和Steak都是允许您在“高速档”中编写测试的框架。不同的是风格 - 黄瓜让你用自然语言编写测试。这有几个好处。

  • 测试是业务人员可读的 - 虽然您不能指望非程序员编写它们,但它们在沟通您打算做的事情方面做得很好。您可以编写该功能(首先是Cucumber测试)并将其显示给客户,以获得有关这是否是他们实际需要的反馈。我发现这非常有用。
  • 黄瓜功能更好地沟通意图 - 因为您可以使用英语(或任何,真的)的全部功能,您可以沟通为什么此功能是相关且如何用户在Ruby不允许的级别上实现目标。
  • 黄瓜有助于发现无处不在的语言 - 该网域包含许多与客户对话中流传的条款。 Cucumber允许您在开始实现该功能之前发现并捕获它们。而且这都是测试驱动的。
  • 黄瓜功能稍微高一些,这使得功能(但不是步骤定义)更加独立于界面。这样,如果界面需要更改,您就不必重新修改功能。

缺点包括学习如何很好地应用它并且你必须多写一点(功能和步骤定义)有点棘手。我发现第二个问题如果你已经做了一段时间并不是真正的问题,因为你得到了一些可重复使用的步骤,可以让你更快地编写下一个功能。

另一方面,牛排更简单,它是Ruby。你失去了使用英语的所有好处,但你可以少写,而且会更快(有点)执行。

在底线,您可以使用两者来编写驱动开发的端到端测试。