在Ruby中修补类/方法的猴子

Chr*_*nch 8 ruby testing monkeypatching rcov

我正在尝试对我用Ruby编写的一段代码进行单元测试File.open.为了模仿它,我monkeypatched File.open到以下:

class File
  def self.open(name, &block)
    if name.include?("retval")
      return "0\n"
    else
      return "1\n"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

问题是我使用rcov来运行整个事情,因为它使用File.open来编写代码覆盖率信息,它获得monkeypatched版本而不是真实版本.我如何取消monkeypatch这种方法将其恢复为原始方法?我试过搞乱alias,但到目前为止无济于事.

pea*_*kxu 13

扩展@Tilo的答案,再次使用别名撤消猴子修补.

例:

# Original definition
class Foo
  def one()
    1
  end
end

foo = Foo.new
foo.one

# Monkey patch to 2
class Foo
  alias old_one one
  def one()
    2
  end
end

foo.one

# Revert monkey patch
class Foo
  alias one old_one
end

foo.one
Run Code Online (Sandbox Code Playgroud)