现在我已经了解了TestUnit,RSpec,Capybara和MiniTest.我开始对什么是什么感到困惑.
这4个项目有什么区别?我知道Cucumber显然执行纯文本功能,我想这可以被认为是集成测试.
但现在我也看到最近版本的Cucumber需要MiniTest? Cucumber只是一个位于测试框架之上的DSL吗?
我也知道RSpec有自己的语法糖来做断言,即“描述”块.似乎MiniTest也支持这种语法.
这是我的问题:
如果我正在创建一个新的Rails 3.2应用程序,我应该使用这些测试程序的组合?什么是额外有用的列表,解释这些宝石及其相关过程如何在适用的情况下相互补充,例如:
Cucumber is a DSL for driving BDD Cucumber is for integration tests and is based on creating user stories that are customer-readable It implements its tests behind the scenes via MiniTest MiniTest is a new testing framework that comes with Ruby 1.9 and is very fast. MiniTest is also used for unit testing,such as testing controllers and models It does not yet have as many features as RSpec Cucumber also uses Capybara to access DOM elements from a javascript-enabled browser simulator such as Selenium When you test in Rails,you have the ability to do the following kinds of tests: controllers,views,models,and integration (MVC together) Some people just do integration and model testing,because they feel that integration testing handles enough of the controller and view testing itself,and anything too complex can simply be moved up to the model
非常感谢您提供任何帮助,以便为我清除这些想法.
解决方法
Cucumber是一种ATDD(或BDD)工具,可让您以面向业务的领域语言编写测试.它主要用作与产品所有者的对话工具.您不是编写详细的要求,而是将这些要求表达为被测系统的示例.实际上,每次黄瓜测试都成为必须满足的业务要求.
Cucumber工具本身将这些纯文本语句转换为一个小模块,供您执行ruby代码.在步骤定义中使用的Ruby库完全取决于您正在处理的项目.
描述Cucumber最安全的方式是它是一个测试框架,强调IT和业务合作伙伴之间的通信,这就是它变得如此受欢迎的原因.
Rspec和Minitest是具有其他优势的其他框架,但缺乏这种业务可读性因素,因为它们主要是代码,并且对于非技术人员来说几乎不可读.这不一定是坏事,特别是如果你的产品所有者多一点动手.
这与Capybara有什么关系? Capybara是一个集成测试自动化库,可以驱动Rack :: Test框架上的无头浏览器进行非常快速的测试,并具有高度可读的DSL.唯一的缺点是Rack :: Test不支持javascript,因此如果您运行javascript测试,它提供了一种故障转移到Selenium的方法. Rspec和Cucumber都有触发此故障转移的机制.
还有很多其他Ruby自动化库.例如,如果您正在对非rails Web App进行测试,您的黄瓜场景可能会使用Watir-Webdriver定义,这将驱动像Capybara在Javascript模式下执行的完整Web浏览器.主要区别在于WW拥有比Capybara更强大的selctors集,所以如果您的代码不是非常干净的话,它会更容易编写(Capybara仅支持通过ID,Value和Text进行选择,而WW支持选择几乎任何东西)
因此,您可能希望使用RSpec或Minitest进行单元测试)或默认的Test :: Unit),以及Cucumber for Integration Testing如果您有感兴趣的产品所有者或需要测试方案的通用语言.如果不这样做,您可以将集成测试编写为Rspec示例或最小等效项而不会丢失太多.