对于我的Rails Web应用程序的集成测试,我使用Steak(类似Cucumber)。 Steak的规格位于名为spec / acceptance的文件夹中。 Steak / Cucumber现在用于集成或验收测试吗?我一直认为这是不同的东西。
答案 0 :(得分:75)
首先,关于术语的说明:术语集成测试在TDD社区中有点模糊。根据您是来自Java还是Rails(使用Test :: Unit),您可能会理解不同的东西。在Rails中(使用Test :: Unit),集成测试是测试完整堆栈的测试,而功能测试则是测试控制器的测试。 Java社区中的大多数人(至少通过我的观察)会认为这是另一种方式。我个人更喜欢调用端到端测试验收测试,而测试涉及系统的多个层(但不是所有) - 集成测试。总而言之,这完全取决于你所处的文化。
至于黄瓜和牛排 - 两者都是允许称为行为驱动开发(或简称BDD)的开发风格的框架。关键是你有两个级别的测试:
在BDD中,你从一个失败的端到端测试开始(熟悉地称为“大档”),然后你开始用RSpec(“低档”)开始实现功能测试,直到你得到端到端的测试通过。通过这种方式,端到端测试正在推动您的单元测试,从而推动您的实施。主要好处是避免范围蔓延 - 您最终不会实现您不需要的用户可见功能(因为您没有为其编写端到端测试)。
如果你想了解更多相关信息,我听说Behavior Driven Development Wikipedia article非常好。此外,RSpec书。
因此,Cucumber和Steak都是允许您在“高速档”中编写测试的框架。不同的是风格 - 黄瓜让你用自然语言编写测试。这有几个好处。
缺点包括学习如何很好地应用它并且你必须多写一点(功能和步骤定义)有点棘手。我发现第二个问题如果你已经做了一段时间并不是真正的问题,因为你得到了一些可重复使用的步骤,可以让你更快地编写下一个功能。
另一方面,牛排更简单,它是Ruby。你失去了使用英语的所有好处,但你可以少写,而且会更快(有点)执行。在底线,您可以使用两者来编写驱动开发的端到端测试。