QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

スタブとモックの違いについて

少し、Javaとは離れてしまいますが、どなたか御教授頂けたらなと思います。

只今、Junitを使用した単体テストについて勉強していますが、
どうしても、「スタブ」と「モック」についての違いがわかりません。
リンク先のページを参考にしてみたものの、
モックとスタブは使用するケースが違うというようなことが書かれていましたが、
理解するまでには至りませんでした。

どなたか、噛み砕いた形で説明して下さる方がいらっしゃいましたら、
御教授して頂けないでしょうか?

よろしくお願い致します。

質問者:P駆け出し

回答

文脈によって意味がちょっと変わってくるかもしれませんが、私が受ける印象は

スタブ:Java では RMI でリモートのオブジェクトを表現するローカルのプロキシオブジェクトを指すことが多い。実際の処理はリモートの実体に委譲する。

モック:テストやコンパイル用に用意されたダミーのクラス。実際に処理は行わず、場合によっては呼び出しが行われたかどうか、どんな引数で呼び出されたかなどを記録している

実際に処理をしてくる人:スタブ、ただのハリボテ:モック、といったところでしょうか。

投稿者:山本 裕介

編集 履歴 (0)

 見た目が同じなのがスタブ、動きが同じなのがモック、かな。

投稿者:lalupin4

編集 履歴 (0)

インギさんの書き込み (2007-05-17 19:14) より:

実際に処理をしてくる人:スタブ、ただのハリボテ:モック、といったところでしょうか。

 あれ、逆なのかな?

投稿者:lalupin4

編集 履歴 (0)

インギ様、lalupin4様、ご回答ありがとうございます。

実際に処理をしてくる人:スタブ、ただのハリボテ:モック、といったところでしょうか。

分かり易いご回答ありがとうございます。
検討が外れていましたら、ご指摘して頂きたいのですが、単体テストを行なう上で、
スタブは、あらかじめ決まったダミーのデータを返すなり、処理を行なうといったことをし、
モックは、テストケースによって返す値を設定しておいて、モックのメソッドが呼ばれたら設定されている値を返すというようなものと解釈しました。

投稿者:P駆け出し

編集 履歴 (0)

スタブ:http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BF%E3%83%96

public int sum(int a, int b) { return a + b; }
が実際の動作だとしましょう。
同時進行でどうしても別のクラスのそのメソッドが必要になった場合、
実際に同一の処理を書くと時間の無駄です。
そのときに作成するプログラムの適当なオブジェクトをかえすのがスタブです。

public int sum (int a, int b) { return 5; } の用に書きます。

モックはなんだkっけか・・・・ 実際の意味は木型だったはずだけど・・

STUB(切り株)

投稿者:朝日奈ありす

編集 履歴 (0)

wikipediaでは

スタブ
http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BF%E3%83%96

モック
http://ja.wikipedia.org/wiki/%E6%9C%A8%E5%9E%8B

なんとなく、機能の代替品がスタブで、外見の代替品がモックなのかなぁ。
携帯電話の店頭デモ品とかはモックアップ(モック)というけどスタブとは言わない。
車などの工業製品のデザインの検討用の実物模型もモックアップですよね。

モックアップは製造業全般の用語で、スタブはソフト業界の用語のようです。

投稿者:nagise

編集 履歴 (0)

杏様、sawat様、nagise様、ご回答ありがとうございます。

sawatさんの書き込み (2007-05-18 09:13) より:

http://capsctrl.que.jp/kdmsnr/wiki/bliki/?TestDouble

上記のページはとても参考になりました。
(簡単な説明で、何となくイメージが沸きました。)
これからさらに詳しく調べて行きたいと思います。

ご回答して下さいました皆様、ありがとうございました。

投稿者:P駆け出し

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。