如何在Ruby中模拟方法调用
我正在为类a编写一个名为m()的测试方法 m()通过名为“B”的B实例对类B调用f(),但我使用-如何在Ruby中模拟方法调用,ruby,unit-testing,minitest,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方法模拟对它的调用并获得常量
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 [:]
您可以使用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
阅读更多内容:谢谢,我只是这样做了,但是m1()调用的方法m2()出现错误-NoMethodError:Unmacked method m2()我想你对
m2
有一个期望,如果没有,就用代码更新问题。或者试着将你所拥有的与答案中的代码片段进行比较。我没有为m2()设置任何期望值。太好了,请使用一些格式,否则它就不可读了。很酷,谢谢朋友,就是这样。还有另一种方法必须加以简化。但是,如果要对多个方法进行存根,并且每个方法存根都有几个“do..end”,那么存根块就很难看了。再次感谢您的时间。我的建议-使用不同的数据运行您的此方法并记录结果。为结果创建简单的临时预期测试,并将这个庞然大物重构为10个可能跨2个不同类的独立方法,然后开始模拟和单元测试它们。。。。很好的建议,但是它有很多条件,如果我重构它,我会得到很多冗余代码。目前,这个方法是不稳定的(不是单词:P)它的一方发生了太多的事情。嵌套条件等。。。它不是一个方法,它是一个方法很少的对象,但这取决于你的配偶;)听起来不错,我们将尝试并实现——或者以Ruby风格实现-