使用摩卡(mocha),有没有一种方法可以对许多参数进行存根处理? [英] using mocha, is there a way to stub with many parameters?
问题描述
让我们假设我有这个课程
Let's assume that i have this class
class Foo
def bar(param1=nil, param2=nil, param3=nil)
:bar1 if param1
:bar2 if param2
:bar3 if param3
end
end
我可以使用以下方法加整条方法:
I can stub whole bar method using:
Foo.any_instance.expects(:bar).at_least_once.returns(false)
但是,如果我只想在bar方法的param1为true时存根,则找不到方法:
However if I only want to stub when param1 of bar method is true, I couldn't find a way to do:
我也查看了with和has_entry,看来它仅适用于单个参数.
I also looked at with, and has_entry, and it seems it only applies to a single parameter.
我期待着这样的功能.
Foo.any_instance.expects(:bar).with('true',:any,:any).returns(:baz1)
Foo.any_instance.expects(:bar).with(any,'some',:any).returns(:baz2)
谢谢
............................................... ....编辑以下内容..................................................... ..
................................................... EDITED THE FOLLOWING .............................................
谢谢,纳什
不熟悉rspec,所以我尝试使用any_instance进行单元测试,并且看起来可行
Not familiar with rspec, so I tried with unit test with any_instance, and it seems work
require 'test/unit'
require 'mocha'
class FooTest < Test::Unit::TestCase
def test_bar_stub
foo = Foo.new
p foo.bar(1)
Foo.any_instance.stubs(:bar).with { |*args| args[0]=='hee' }.returns('hee')
Foo.any_instance.stubs(:bar).with { |*args| args[1]=='haa' }.returns('haa')
Foo.any_instance.stubs(:bar).with { |*args| args[2]!=nil }.returns('heehaa')
foo = Foo.new
p foo.bar('hee')
p foo.bar('sth', 'haa')
p foo.bar('sth', 'haa', 'sth')
end
end
推荐答案
如果我答对了,它可能类似于:
If I got you right it can be something like:
class Foo
def bar(param1=nil, param2=nil, param3=nil)
:bar1 if param1
:bar2 if param2
:bar3 if param3
end
end
describe Foo do
it "returns 0 for all gutter game" do
foo = Foo.new
foo.stub(:bar).with { |*args| args[0] }.and_return(:bar1)
foo.stub(:bar).with { |*args| args[1] }.and_return(:bar2)
foo.stub(:bar).with { |*args| args[2] }.and_return(:bar3)
foo.bar(true).should == :bar1
foo.bar('blah', true).should == :bar2
foo.bar('blah', 'blah', true).should == :bar3
end
end
这篇关于使用摩卡(mocha),有没有一种方法可以对许多参数进行存根处理?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!