メソッドを再定義した後、元に戻す

Java で Mock オブジェクトどうやってつくりゃいいんだろうと調べてる途中。

class Test
  def say
    puts "hello"
   end
end
# インスタンスを生成
test = Test.new
test.say #=> hello
# メソッドのバックアップ
method_say = Test.__send__(:instance_method , :say)
# メソッドを入れ替える
Test.__send__(:define_method , :say) {puts "defined method"}
test.say #=> defined method
# メソッドを元に戻す
Test.__send__(:define_method , :say , method_say)
test.say #=>hello