日々精進

新しく学んだことを書き留めていきます

テスト時に実行したくないメソッドを切り替える方法2

方法2.特異メソッドを定義する

class Target
  def initialize
    @inner_target = InnerTarget.new
  end

  def foo
    open("http://yahoo.co.jp/")
  end
end

describe TestingTarget do
  before(:all)
    target = TestingTarget.new
    def target.foo
      return File.open("yahoo.html").read
    end
  end

  it "testing" do
    target.foo.should == "expectation"
  end
end

rubyのような動的言語ならテストクラス内でメソッドの上書きができちゃいます。
この方法の問題点はインスタンスメソッドの上書きはテストクラス内で生成したインスタンスでないとできないというところです。
たとえば、上記例で@inner_targetオブジェクトのインスタンスメソッドはテストクラス内で上書きできません。