モックとスタブの違い

"モックオブジェクト"という言葉は、テストのために本物のオブジェクトをまねる特殊なオブジェクトを表す言葉として定着した。しかしモックという言葉は元々スタブをキャッチーにしたものでなく、[スタブを使ったのとは別の] ユニットテスト方法を用いるためのものなのだ。この記事では、モックオブジェクトのファンに好まれる相互作用中心のテストと、よく行わている状態中心のテストスタイルとの違いを説明するために、モックとスタブの違いについて掘り下げる。

目次

  • 状態中心のテスト
  • 相互作用中心のテスト
    • EasyMockを使う
  • モックとスタブの違い
  • スタイルの違い
    • フィクスチャ*1のセットアップ
    • テストドリブン開発
    • テストの分離
    • 実装からテストを分離する
    • 設計スタイル
  • 結局一番良いのはどっちか?

"モックオブジェクト"という言葉に最初に出会ったのは数年前のXPコミュニティでだった。それから私はモックオブジェクトとどんどん出くわすようになった。その理由のいくらかはモックオブジェクのリーダー的開発者の多くがToughtWorksロンドンオフィスの同僚だったからだ。またいくらかは、XPに感化されたテスティングの文献でますます目にするようになったからだ。

しかしモックオブジェクトがちゃんと説明されていないことが多く、特にテスト環境で一般的に用いられるスタブと混同されているのを見かける。私も同じように考えていたことがあるから、混同されるのもわかる。しかしモック開発者とのやり取りのおかげで、徐々に私の固い頭も少しわかるようになってきた。

モックオブジェクトコミュニティで [学んだこと] の本質は、モッカー達が実践しているような別のテスト方法があるということだ。そしてXPの世界ではテストとデザインがとても絡み合っているために、[モックオブジェクトを使ったテストは]設計と開発についての[XPとは]異なる考えであることを暗示している。
モッカー達はよくこの違いを、状態中心のテストと相互作用中心のテストの違いとして引用する。この論文での私の目的は、この2つのテスト方法を明らかにし、その違いによって起きることを探ることだ。モックとスタブとの混同は、その違いの単なる表面的な現象にすぎないのだ。

*1:メインオブジェクトが使用するオブジェクト。「状態中心のテスト」の項参照