質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

Q&A

解決済

3回答

15905閲覧

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

tixure55

総合スコア400

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

0グッド

6クリップ

投稿2015/08/10 22:07

モックとスタブの違いについて教えてください。職場で、スタブを使って意図的に画面上でエラーを発生させ、それをフィルタリングできているかどうかのテストをしたのですが、スタブが何かわかってなかったので、いまいちピンときませんでした。

また、モックはexpect()やwillでテストの条件を決めつつ、任意のクラスをテストするオブジェクトという認識なのです。

しかし、他の解説をみると、時間やOSなど環境に応じて起こる差異から同様の結果が得られない問題をモックオブジェクトを作ることで解消できるみたいな記事があったので、本物そっくりのオブジェクトの特定の機能だけ抜粋したものがモックなのでは?とも思えるのですが、どちらの解釈が合っているのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

オブジェクトとか、難しい説明を持ち込むから分かりにくくなるのだと思います。

大元の意味に立ち返ってみれば
スタブ
モックアップ

言い換えると、スタブとは、テストに必要だけどまだ実装出来ていないモジュールがある時に、そのモジュールの代わりにテストケースに沿った値を返してくれるテスト用のプログラムのことです。

一方、モックは外観ないしはユーザーインターフェイスの振る舞いを模倣したもの、言うなれば張りぼてです。
最も身近な例は携帯ショップに並んでる「見本」です。実際に通話は出来ないけれど見た目や重さ、ボタンの操作感などが実物そっくりです。

スタブと対になっているのでドライバの意味も合わせ覚えて置かれると良いです。
ドライバ

以上、理解の助けになれば幸いです。

投稿2015/08/10 23:59

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

スタブの説明は pi-chan さんの説明通りだと思います、

一方、モックですが、元のオブジェクトを置き換えて、メソッドが期待する引数で呼ばれたかを検証するオブジェクトのことです。

このようなオブジェクトをモックオブジェクトと呼びます。

例えば、あるテストしたいオブジェクト A があったとして、その A はオブジェクト B をコンストラクタで受け取って、A のメソッドから間接的に B のメソッドが呼ばれるようになっているとします。
このとき、B をモックオブジェクトに置き換えることで、A が B のメソッドをどのような引数で呼び出しているかを検証することができます。

なお、通常、モックで検証を行わなければスタブとして利用できます。


「本物そっくりのオブジェクト」に対して expect() や when() を用いて検証するので、どちらの解釈も特に間違っていないように思います。

投稿2015/08/11 01:36

ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tixure55

2015/08/14 05:35

なるほど、受け取る引数や用意されているfunctionが本物そっくりで、機能はしないのがモックということですね。では、モック化されたオブジェクトのfunction群は空っぽで引数だけが定義されているというので合ってますか?
ngyuki

2015/08/14 06:16

その説明だとモックというよりスタブです。モックは、ある引数で何回呼ばれたかを検証することができるものです。 > モック化されたオブジェクトのfunction群は空っぽで引数だけが定義されているというので合ってますか? そうではありません。呼出し側が期待する値を返すべきだし、呼び出し回数や引数を記録して、それが妥当であるかを検証できる必要があります。
guest

0

XUnit Test Pattens(洋書)という本にMockとStubの違いについてまとめられていましたが、書籍や文献により意味がブレています。言い換えれば、人により、MockやStubの意味が少しづつ違っているそうです。

機能的には大きな差がないので、XUnit Test Patternsでは「テストダブル(TestDouble)」と呼んでいました。

投稿2015/08/11 01:26

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問