web-dev-qa-db-ja.com

「スタブ」とは何ですか?

ですから、TDDをもっと活用するために私の新しい年の決議を続けて、私は今、 Rhino Mocks でもっと働き始めています。

私がやりたいことの1つは、自分がやっているものを本当に掴むことを確認することです。それで、私はこれまでに見たことの理解を確認したかったです。リソース)。

「スタブ」とは何ですか?

111
Rob Cooper

Martin Fowlerは、このテーマについて 優れた記事 を書きました。その記事から:

Meszarosでは、テスト目的で実際のオブジェクトの代わりに使用されるあらゆる種類のふりオブジェクトの総称として、Test Doubleという用語を使用しています。名前は、映画のスタントダブルの概念に由来します。 (彼の目的の1つは、既に広く使用されている名前の使用を避けることでした。)Meszarosは、4つの特定の種類のdoubleを定義しました。

  • ダミーオブジェクトは渡されますが、実際には使用されません。通常、それらはパラメータリストを埋めるためにのみ使用されます。
  • 偽のオブジェクトには実際に動作する実装がありますが、通常は本番環境に適さないようにするためのショートカットを使用します(メモリ内データベースは良い例です)。
  • スタブは、テスト中に行われた呼び出しに対して定型の回答を提供し、通常、テスト用にプログラムされたもの以外には何も応答しません。スタブは、「送信」したメッセージを記憶する電子メールゲートウェイスタブ、または「送信」したメッセージの数だけなど、コールに関する情報も記録する場合があります。
  • ここで私たちが話しているのはモックです。受信することが期待されるコールの仕様を形成する期待で事前にプログラムされたオブジェクトです。

私自身の言葉で言うと、モックオブジェクトは特定のメソッドが呼び出されることを「期待」し、通常、期待を満たしていない場合は単体テストを失敗させます。スタブオブジェクトは定型応答を提供します(ヘルパーライブラリによって自動生成できます)が、通常notを実行すると、単体テストが失敗します。これらは通常、テスト対象のオブジェクトが作業に必要なデータを取得するために使用されます。

102
Ross

「スタブ」は、ある種のデータ/応答を提供するために存在するインターフェースの実装です。例えば:

  • dataSet
  • ユーザーのリスト
  • xmlファイル

通常、これは別のサービス(Webサービス、別のアプリケーション、データベース)によって提供されますが、コードのtestabilityを改善するために、結果は「偽造」されます。

これの主な利点は、予想されるデータに基づいて単体テストでアサーションを作成できることです。データエラーが原因でエラーが発生した場合、テストを簡単に追加し、新しいスタブを作成(データエラーを複製)して、エラーを修正するためにコードを生成できます。

スタブは、モックとは異なり、 状態オブジェクトの、モックは相互作用をテストします。

29
Rob Cooper

「スタブ」はSTartUpBlockから来ていると思います。開発者である開発者が開始するのを支援するために自動生成されるコードの一部を参照するために使用されます。

7
Kris

「スタブ」または「スタブメソッド」は、スターターコードまたは未開発コードの一時的な代替として設計されています。 IDEによって生成される組み込みコードです。スタブメソッドは、実際には特定のクラスのメソッドをテストするために使用されるメソッドです。実際の開発方法でローカル変数にいくつかの値を入力し、出力が正しいかどうかを確認することによって使用されます。コード内のバグを見つけるには重要です。

2
Nasserr

私は最近質問に直面し、StubDriverのこの比較を認識しました本当に明確で便利です:

基本的に、スタブとドライバーは、自分自身とそれらが受け入れるパラメーターを宣言する以外は実際には何もしないルーチンです。その後、残りのコードはこれらのパラメーターを受け取り、入力として使用できます。

 + --------- + ------------------------------- +- ----------------------------- + 
 | |スタブ|ドライバー| 
 + --------- + ------------------------------- + ------------------------------- + 
 |タイプ|ダミーコード|ダミーコード| 
 + --------- + ------------------------------- + ------------------------------- + 
 |で使用される|トップダウン統合|ボトムアップ統合| 
 + --------- + ------------------------------ -+ ------------------------------- + 
 |目的|上部のテストを許可するには|下のテストを許可するには| 
 | |コードのレベル。コードのレベル、| 
 | |コードの下位レベルは次のとおりです。コードの上位レベルは| 
 |です。 |まだ開発されていません。 |まだ開発されていません。 | 
 + --------- + ------------------------------- +- ------------------------------ + 
 |例| AとBはコンポーネントです。 | AとBはコンポーネントです。 | 
 | | A ---> B | A ---> B | 
 | | | | 
 | | Aが開発されました。 |まだ開発する必要があります。| 
 | | Bはまだ開発する必要があります。| Bが開発されました。 | 
 | |したがって、スタブが使用されます|したがって、ドライバーが使用されます| 
 | | Bの代わりにそれを模倣します。 | Aの代わりにそれを模倣する| 
 | | | | 
 | | A --->スタブ|ドライバー---> B | 
 + --------- + --------------------------- ---- + ------------------------------- + 

から スタブとドライバーの違い

1
Vahid Hallaji

いくつかの調査の後、コーダーライフ中に直面したスタブファイルに基づいて、スタブファイルはファイルの実装の全体または一部を含む単なるファイルであると言えます。開発者がコーディングを開始するのに役立ちます。

0
Deric Lima