используя мокко, есть ли способ заглушки со многими параметрами?

Предположим, что у меня есть этот класс

class Foo
  def bar(param1=nil, param2=nil, param3=nil)
     :bar1 if param1
     :bar2 if param2
     :bar3 if param3
  end
end

Я могу заглушить метод всего столбца, используя:

Foo.any_instance.expects(:bar).at_least_once.returns(false)

Однако, если я хочу заглушить только тогда, когда param1 метода столбца имеет значение true , я не смог найти способ сделать это:

Я также просмотрел with и has_entry, и кажется, что это применимо только к одному параметру.

Я ожидал такой функции.

Foo.any_instance.expects(:bar).with('true',:any,:any).returns(:baz1)
Foo.any_instance.expects(:bar).with(any,'some',:any).returns(:baz2)

Спасибо

........................................... ........ ОТРЕДАКТИРОВАНО СЛЕДУЮЩЕЕ ....................................... ......

Спасибо, нэш

Не знаком с rspec, поэтому попробовал модульный тест с any_instance, и вроде работает

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
10
задан allenhwkim 9 March 2012 в 21:06
поделиться