我有这堂课:
class Mock
attr_accessor :implementations
def initialize()
@implementations = Array.new
end
def method_missing(method_name, *arguments, &block)
implementation = findImplementation(method_name, arguments)
if implementation.nil?
raise "Undefined method #{method_name}."
else
puts "Implemented Method!"
end
end
def implement_method(method_name, parameters, return_value)
@implementations.unshift(Implementation.new(method_name, parameters, return_value))
@method_to_mock = nil
@parameter = nil
@return_value = nil
end
def findImplementation(method_name, args)
return @implementations.find { |i| i.method_name == method_name && i.parameters == args }
end
end
如果我做:
m = Mock.new
m.implement_method(:something, 10, true)
m.findImplementation(:something, 10)
它返回我在第二行添加的实现。但是当我这样做时:
m.something(10)
输出"未定义的方法"。显然我在method_missing方法中调用的findImplementation调用返回nil。我做错了什么?
答案 0 :(得分:0)
最简单的解决方案是将参数作为数组传递。 (无论如何你会如何处理多个参数?)
因此,您的代码变为
m = Mock.new
m.implement_method(:something, [10], true)
m.findImplementation(:something, [10])