加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何模拟已经模拟过的对象的实例方法?

发布时间:2020-12-17 01:44:36 所属栏目:百科 来源:网络整理
导读:我需要嘲笑以下内容: Class User def facebook #returns an instance of a facebook gem endend 因此,在我的用户测试中,要访问用户的Facebook信息,我需要调用user.facebook.me.info来检索其信息.如果我想嘲笑这个,我目前正在使用以下内容: @user = Factory
我需要嘲笑以下内容:

Class User
  def facebook
    #returns an instance of a facebook gem
  end
end

因此,在我的用户测试中,要访问用户的Facebook信息,我需要调用user.facebook.me.info来检索其信息.如果我想嘲笑这个,我目前正在使用以下内容:

@user = Factory(:user)
facebook = mock()
me = mock()
me.expects(:info).returns({"name" => "John Doe"})
facebook.expects(:me).returns(me)
@user.expects(:facebook).returns(facebook)
assert_equal "John Doe",@user.facebook.me.info["name"]

这有效,但似乎有点笨拙,有没有更好的方法来做到这一点?

[编辑]我正在使用mocha作为模拟框架

解决方法

你可以尝试这样的事情: –

user = Factory(:user)
user.stubs(:facebook => stub(:me => stub(:info => {:name => "John Doe"})))

如果你真的想检查所有这些方法是否被调用(我怀疑你没有),你可以做以下事情: –

user = Factory(:user)
user.expects(:facebook => mock(:me => mock(:info => {:name => "John Doe"})))

它有点冗长,但通常值得给每个模拟对象一个名字: –

user = Factory(:user)
user.stubs(:facebook => stub('facebook',:me => stub('me',:info => {:name => "John Doe"})))

我希望有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读