快速业务通道

Ruby on rails开发从头来(windows)(二十六)- 使用Mock对象 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

Ruby on rails开发从头来(windows)(二十六)- 使用Mock对象

时间:2011-12-02 博客园 Cure

前面我们测试了model和controller,学习了一些常用的测试方法,现在我们来深入学习几个有关测试的主题。第一个是使用Mock对象。

在很多时候,我们的程序和实际的环境有依存关系,比如现在的购物车,在汇款,结账的时候要接入网络上的银行账号,这样就造成了我们测试的时候必须要有internet环境。比如,我们在model目录里创建了一个payment_gateway.rb来处理网络银行相关的操作,我们在store_control.rb的save_order方法里这样写:

gateway = PaymentGateway.new
 response = gateway.collect(:login => ''username'',
  :password => ''password'',
  :amount => cart.total_price,
  :card_number => @order.card_number,
  :expiration => @order.card_expiration,
  :name => @order.name)

我们在gateway的collect方法中使用银行账号的用户名,密码等信息,但是这样一来,我们在测试的时候必须具有真实的internet环境,并且,我们不想在每次运行测试的时候都真正得去操作银行账户。

所以,我们需要的是一个假对象(mock)或PaymentGateway的一个替代品,在这里,rails为我们提供了方便,我们所要做的就是在test/mock/test/目录下创建一个payment_gateway.rb文件,用来覆盖app/models目录下的payment_gateway.rb,要注意,这两处的文件名必须完全一致。Mock文件的内容:

require ''models/payment_gateway''
class PaymentGateway
 def collect(request)
  # I''m a mocked out method
  :success
 end
end

这意味着我们用mock对象替代了真实的models目录下的PaymentGateway,而collect方法也返回一个假的响应。

在测试的时候,Rails会先到mock对象所在的目录查找,这样,加载的就是mock目录下的类,而不是真实的models目录下的类。

这样,通过使用mock对象,我们可以将精力放在重要的,优先级高的测试上,rails让这些工作变得简单。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号