Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby中模拟方法调用_Ruby_Unit Testing_Minitest - Fatal编程技术网

如何在Ruby中模拟方法调用

如何在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方法模拟对它的调用并获得常量

我正在为类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 [:]

您可以使用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风格实现-