日々精進

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

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

ネットワークやDBにアクセスするコードは単体テスト時には実行したくないですよね。
そういうコードをテスト環境で切り替える方法はいくつかありますが、一番お手軽な方法はメソッドを上書きする方法です。


方法1.サブクラスでoverride

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

class TestingTarget < Target
  def foo
    return File.open("yahoo.html").read
  end
end

describe TestingTarget do
  it "testing" do
    target = TestingTarget.new
    target.foo.should == "expectation"
  end
end

手順は以下です。
1.ネットワーク・DBにアクセスしているコードをメソッドに抽出する。
2.テスト用のサブクラスを作成し、1番で抽出したメソッドをoverrideする。
3.テスト用のサブクラスに対してテストをする