
11.3
ステップ
1
:モックを準備する
193
モックとスタブの違い
自動テストで耳にする「モック」と「スタブ」という言葉は、ときどき同じ意味で使われてい
ることもありますが、実際には少し意味が異なります。
スタブは、ハードコードされたデータを返すテストダブルであり、基本的にロジックを持ち
ません。スタブを使うときにやることは、高コストな実際の操作をハードコードによって単純
化されたダミーで置き換えるというだけです。他には特に何もしません。
class StubWeatherForecaster
def predict_weather(city)
if city === 'Hawaii'
return 30
elsif city === 'Stockholm'
return 0
elsif city === 'Winnipeg'
return -20
end
end
end
一方モックは、データを返すだけではなく、テストを通じて操作、監視される対象となります。
たとえば気象予報サービスにハワイで氷点下の温度を観測した場合をシミュレートさせたい
ときや、さらに気温が氷点下まで下がったら、特殊な湿度計算処理が呼ばれることを検証した
いときには、モックを使って次のように書くことができます。
@mockForecaster.expects(:predict_weather).with('Hawaii').returns(-10)
@mockForecaster.expects(:calculate_cold_humidity) ...