ボクココ

個人開発に関するテックブログ

モックとスタブの違いがわかった

今日Seasar2の勉強会があって、そこで一番勉強になったのはSeasarの使い方ではなく「テストの書き方」だった。

何度か自分もテストを書いてきたけど、やっぱり外部のライブラリとかを多用しだすとそれを加味したテストとか無理じゃね?とか思って諦めているケースが多かった。
そんな時はメソッドの内容をテスト用に書き換えてその外部ライブラリの中身の結果だけを返す「スタブ」を作ればいいことがわかった。テスト書くときこれ必須っすね。。今までなんでちゃんとやってこなかったんだろう。

さて、今これは「スタブ」といえたが、モックではない(と解釈している)。
この違いを簡単にまとめてみよう。


スタブ: 
オブジェクトのメソッドの戻り値を変更してテストが通るようにする。メソッドの中身を「Stub out(もみ消す)」

モック:
オブジェクトのメソッドをそれぞれ用意して、後でテストで使える状態にする。
例:

class HogeMock
def aaa
return "aaa"
end
def iii
return "iii"
end
end

class TestHoge
こんな感じで仮に定義したメソッドが呼ばれて、正しい値を返すかどうかまでテストする場合はモックと呼ぶっぽい。
※間違ってたらご指摘くれると嬉しいです。

参考:
http://d.hatena.ne.jp/takihiro/20081023/1224762895