概要
モック
詳細
モックは特定の引数でメソッド呼び出し時に特定の値を戻します。
スタブは単純に特定の値を返却するのに対し、モックは特定のコンテキストに応じた値を返却します。
サンプル
引数で指定されたオブジェクトから生成された乱数と
内部で生成された乱数を元にしたテキストを返却するクラスのテストを行うとします。
引数に設定したlargeフラグがtrueなら50-100の乱数を生成し、
引数に設定したsmallフラグがtrueなら0-50の乱数を生成することとします。
テスト対象
# encoding: utf-8 class Hoge def hoge(hage, large) "hoge#{hage.random1(large)}-#{random2(large)}" end def random2(large) if large rand 50..100 else rand 50 end end end class Hage def random1(large) if large rand 50..100 else rand 50 end end end
Spec
# encoding: utf-8 require_relative "../hoge" describe "hoge" do it "hoge returns hoge large" do hoge = Hoge.new # 引数やフィールドから設定出来る要素の場合 hage = mock('hage') hage.should_receive(:random1).with(true).and_return(75) # 引数やフィールドから設定出来ない、内部利用のみの処理をモック化する場合 Hoge.any_instance.should_receive(:random2).with(true).and_return(75) ret = hoge.hoge(hage, true) expect(ret).to eq("hoge75-75") end it "hoge returns hoge small" do hoge = Hoge.new # 引数やフィールドから設定出来る要素の場合 hage = mock('hage') hage.should_receive(:random1).with(false).and_return(25) # 引数やフィールドから設定出来ない、内部利用のみの処理をモック化する場合 Hoge.any_instance.should_receive(:random2).with(false).and_return(25) ret = hoge.hoge(hage, false) expect(ret).to eq("hoge25-25") end end
テスト結果
$rspec .. Finished in 0.004 seconds 2 examples, 0 failures