【发布时间】:2010-10-25 23:18:52
【问题描述】:
对于我的 Rails Web 应用程序的集成测试,我使用 Steak(类似于 Cucumber)。 Steak 的规格位于名为 spec/acceptance 的文件夹中。 Steak/Cucumber 现在是否用于集成或验收测试?我一直认为这是不同的东西。
【问题讨论】:
标签: ruby-on-rails rspec cucumber integration-testing acceptance-testing
对于我的 Rails Web 应用程序的集成测试,我使用 Steak(类似于 Cucumber)。 Steak 的规格位于名为 spec/acceptance 的文件夹中。 Steak/Cucumber 现在是否用于集成或验收测试?我一直认为这是不同的东西。
【问题讨论】:
标签: ruby-on-rails rspec cucumber integration-testing acceptance-testing
首先,关于术语的说明:集成测试这个术语在 TDD 社区中有点模糊。根据您是来自 Java 还是 Rails(使用 Test::Unit),您可能会通过它理解不同的东西。在 Rails(带有 Test::Unit)中,集成测试是测试你的完整堆栈的测试,而功能测试是测试你的控制器的测试。 Java 社区中的大多数人(至少根据我的观察)会认为情况正好相反。我个人更喜欢将端到端测试称为验收测试,而涉及系统多个层(但不是全部)的测试——集成测试。总而言之,这很大程度上取决于你所处的文化。
至于 Cucumber 和 Steak —— 两者都是允许被称为行为驱动开发(或简称 BDD)的开发风格的框架。关键是您有两个级别的测试:
在 BDD 中,您从一个失败的端到端测试开始(被亲切地称为“上层齿轮”),然后您开始使用 RSpec(“下层齿轮”)首先实现功能测试,直到您获得端到端测试通过。通过这种方式,端到端测试正在推动您的单元测试,进而推动您的实施。主要好处是避免范围蔓延——您最终不会实现不需要的用户可见功能(因为您没有为其编写端到端测试)。
如果您想了解更多信息,我听说Behavior Driven Development Wikipedia article 非常好。还有,RSpec 书。
因此,Cucumber 和 Steak 都是允许您在“上层”编写测试的框架。不同之处在于风格——Cucumber 让你用自然语言编写测试。这有几个好处。
缺点包括学习如何很好地应用它有点棘手,并且您必须编写更多内容(功能和步骤定义)。我发现,如果您已经这样做了一段时间,那么第二个并不是真正的问题,因为您可以获得大量可重用的步骤,可以让您更快地编写下一个功能。
另一方面,牛排更简单,它是 Ruby。你失去了使用英语的所有好处,但你可以写得更少,它会执行得更快(有点)。
归根结底,您可以使用两者来编写推动开发的端到端测试。
【讨论】: