それで、TDDにより多くを取り入れるという私の新しい年の決議を続けて、私は今Rhino Mocksでもっと働き始めています。
私がやりたいことの1つは、自分が入っているものを実際に理解することです。そのため、これまでに見たことの理解を確認したいと思いました(そして、資源)。
それで、TDDにより多くを取り入れるという私の新しい年の決議を続けて、私は今Rhino Mocksでもっと働き始めています。
私がやりたいことの1つは、自分が入っているものを実際に理解することです。そのため、これまでに見たことの理解を確認したいと思いました(そして、資源)。
回答:
マーティン・ファウラーはこの主題について優れた記事を書いた。その記事から:
Meszarosは、テスト目的で実際のオブジェクトの代わりに使用されるあらゆる種類のふりオブジェクトの総称としてTest Doubleという用語を使用します。名前は映画のスタントダブルの概念から来ています。(彼の目的の1つは、すでに広く使用されている名前を使用しないようにすることでした。)Meszarosは次に、4つの特定の種類のdoubleを定義しました。
- ダミーオブジェクトは渡されますが、実際には使用されません。通常、これらはパラメータリストの入力に使用されます。
- 偽のオブジェクトは実際には機能する実装を持っていますが、通常はいくつかの近道をとって、プロダクションには適していません(メモリ内データベースが良い例です)。
- スタブは、テスト中に行われた呼び出しに対する定型の回答を提供します。通常、テスト用にプログラムされたもの以外にはまったく応答しません。スタブは、「送信」されたメッセージを記憶する電子メールゲートウェイスタブや、「送信」されたメッセージの数だけを記録するなど、呼び出しに関する情報を記録する場合もあります。
- モックとは、ここで話しているものです。事前にプログラムされたオブジェクトで、期待される呼び出しの仕様を形成します。
私の言葉で言えば、モックオブジェクトは特定のメソッドが呼び出されることを「期待」し、通常、それらの期待が満たされない場合、ユニットテストが失敗します。スタブオブジェクトは、応答を缶詰提供(およびヘルパーライブラリによって自動生成されます)が、通常はないではない、直接ユニットテストが失敗する原因。これらは通常、テスト対象のオブジェクトが作業に必要なデータを取得するために使用されます。
「スタブ」は、ある種のデータ/応答を提供するために存在するインターフェースの実装です。例えば:
通常、これは別のサービス(Webサービス、別のアプリケーション、データベースなど)によって提供されますが、コードのテスト容易性を向上させるために、結果は「偽造」されます。
これの主な利点は、予想されるデータに基づいて単体テストでアサーションを作成できることです。データエラーが原因でエラーが発生した場合、テストを簡単に追加し、新しいスタブを作成(データエラーを複製)し、エラーを修正するためのコードを生成できます。
スタブは、オブジェクトの状態を表現およびテストするために使用される点でモックとは異なり、モックはその相互作用をテストします。
「スタブ」はSTartUpBlockに由来すると思います。開発者である開発者を支援するために自動生成されるコードの一部を参照するために使用されます。
「スタブ」または「スタブメソッド」は、スターターコードまたは未開発のコードの一時的な代用として設計されています。これは、IDEによって生成された組み込みコードです。スタブメソッドは、実際には特定のクラスのメソッドをテストするために使用されるメソッドです。実際の開発メソッドでローカル変数にいくつかの値を入力して使用し、出力が正しいかどうかを確認します。コードのバグを見つけることは重要です。
私は最近質問に直面し、スタブとドライバーのこの比較が本当に明確で役立つことを認識しました:
基本的に、スタブとドライバーは、自分自身とそれらが受け入れるパラメーターを宣言することを除いて、実際には何もしないルーチンです。コードの残りの部分は、これらのパラメーターを受け取り、入力として使用できます。
+ --------- + ------------------------------- + ------- ------------------------ + | | スタブ| ドライバー| + --------- + ------------------------------- + ------- ------------------------ + | タイプ| ダミーコード| ダミーコード| + --------- + ------------------------------- + ------- ------------------------ + | |で使用 トップダウン統合| ボトムアップ統合| + --------- + ------------------------------- + ------- ------------------------ + | 目的| アッパーのテストを許可するには| 下部のテストを許可するには| | | コードのレベル、| コードのレベル、| | | コードの下位レベルは| コードの上位レベルは| | | まだ開発されていません。| まだ開発されていません。| + --------- + ------------------------------- + ------- ------------------------ + | 例| AとBはコンポーネントです。| AとBはコンポーネントです。| | | A ---> B | A ---> B | | | | | | | Aが開発されました。| スチールを開発する必要があります。| | | Bはまだ開発する必要があります。| Bが開発されました。| | | したがって、スタブが使用されます。したがって、ドライバーが使用されます。 | | Bの代わりにそれを模倣します。| Aの代わりに | | | | | | A --->スタブ| ドライバー---> B | + --------- + ------------------------------- + ------- ------------------------ +