如何在Ruby中模拟方法调用

时间:2015-11-11 22:46:31

标签: ruby unit-testing minitest

我正在为A类编写测试方法,方法名为m()。

m()通过名为' b'的B实例调用B类的f(),但我使用 -

模拟该方法调用
def test_m 
@a = A.new
b_mock = MiniTest::Mock.new
b_mock.expect(:f, 'expected_output')
def b_mock.f()
return 'expected output'
end
@a.b = b_mock
end

现在A有另一种方法m1(),如何使用上述或更好的Minitest方法模拟对它的调用并得到一个常量输出?

错误 -

NoMethodError: unmocked method :get_group_by_name, expected one of [:]

1 个答案:

答案 0 :(得分:2)

您可以使用MiniTest Object #stub方法,它会在块的持续时间内重新定义方法结果。

require 'minitest/mock'

class A
  def m1
    m2
    'the original result'
  end

  def m2
    'm2 result'
  end
end

@a = A.new
@a.stub :m1, "the stubbed result" do

  puts @a.m1  # will print 'the stubbed result'
  puts @a.m2

end

了解详情:http://www.rubydoc.info/gems/minitest/4.2.0/Object:stub