def Mock( realclass )
mockclass = Class.new( Mock )
mockclass.instance_eval do @mocked_class = realclass end
class << mockclass
attr_reader :mocked_class
def inherited( subclass )
mc = self.mockedClass
subclass.instance_eval do @mocked_class = mc end
end
end
imethods = realclass.instance_methods(true).collect do |name|
next if name =~ ::Mock::UnmockedMethods
arity = realclass.instance_method( name ).arity
optargs = false
if arity < 0
optargs = true
arity = (arity+1).abs
end
args = []
arity.times do |n| args << "arg#{n+1}" end
args << "*optargs" if optargs
argsj = args.join(',')
case name.intern
when :initialize
"def initialize(#{argsj}) ; super ; end"
else
"def #{name}(#{argsj}) ; self.send(#{name},#{argsj}) ; end"
end
end
mockclass.class_eval imethods.join( "\n" )
return mockclass
end