Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

モックとスタブの違い〜Next Generation Java Testingより〜

この本読んでます。

Next Generation Java Testing: TestNG and Advanced Concepts

Next Generation Java Testing: TestNG and Advanced Concepts


僕が考えていたよりもいい本。
作者はTestNGを作っている人。GooglerでAndroidの開発に携わっているようだ。


で、この本でモックとスタブの違いがようやくはっきりしてきた。
JUnit in Actionとかでも説明があったんだけど、イマイチ僕はモックとスタブの違いがわからなかった。

  • スタブは最小限の用件を満たした特定の結果でメソッドを置き換えるもの。
  • モックは一連の期待される流れから特定のメソッドに指定するもの。


スタブは置き換えるものだから1つしかないのが普通であるのに対して、モックはそのとき期待される動作を実現するものであるから、その流れの数(=ケースの数)だけモックも存在するということじゃないかな。
あるメソッドのモックは複数あることがあると。


モックはそのケースの期待値から定義されるものであって、スタブはもっと汎用的なものというイメージ。


モックはコンポーネント間の振る舞いややり取りをテストするものであって、スタブはテストの際に単純な実装で重い処理を置き換えるものとも考えられるとも本にあった。