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

Zar*_*doz 24 integration-testing rspec ruby-on-rails acceptance-testing cucumber

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

Ste*_*nev 76

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

至于Cucumber和Steak - 两者都是允许开发风格的框架,称为行为驱动开发(简称BDD).关键是你有两个级别的测试:

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

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

如果你想了解更多相关信息,我听说行为驱动开发维基百科的文章非常好.另外,RSpec书.

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

  • 测试是业务人员可读的 - 虽然你不能指望非程序员编写它们,但他们在沟通你想要做的事情方面做得很好.您可以编写该功能(首先是Cucumber测试)并将其显示给客户,以获得有关这是否是他们实际需要的反馈.我发现这非常有用.
  • 黄瓜功能更好地传达意图 - 因为你可以充分利用英语(或任何,真的)的全部功能,你可以沟通为什么这个功能是相关的,以及用户如何在Ruby不允许的水平上实现他们的目标你到.
  • 黄瓜有助于发现无处不在的语言 - 该领域包含许多在与客户交谈中飞来飞去的术语.Cucumber允许您在开始实现该功能之前发现并捕获它们.它都是测试驱动的.
  • 黄瓜功能稍微高一些,这使得功能(但不是步骤定义)更加独立于界面.这样,如果界面需要更改,您将不必重做功能.

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

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

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

  • 谢谢你的详细解释.特别是第一部分对我来说很有趣.因此,当测试中包含至少两个层时(例如控制器+视图),可以说集成测试.当测试中包含所有层(==端到端)时进行验收测试.所以看起来Rails社区有时对确切的命名有点松懈,因为Cucumber和Steak通常被称为集成测试fameworks.但实际上两者都是为接受(端到端)测试而设计的. (3认同)