• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
前面我们测试了modelcontroller,学习了一些常用的测试方法,现在我们来深入学习几个有关测试的主题。第一个是使用Mock对象。

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

我们在gatewaycollect方法中使用银行账号的用户名,密码等信息,但是这样一来,我们在测试的时候必须具有真实的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让这些工作变得简单。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Ruby基础教程1-10发布时间:2022-07-13
下一篇:
如何在Mac OS X上安装 Ruby运行环境发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap