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