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"}))) 我希望有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |