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


116

それで、TDDにより多くを取り入れるという私の新しい年の決議を続けて、私は今Rhino Mocksでもっと働き始めています。

私がやりたいことの1つは、自分が入っているものを実際に理解することです。そのため、これまでに見たことの理解を確認したいと思いました(そして、資源)。

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


6
最初に質問し、次に答えを出しますか?
empi、2009年

17
質問で述べたように-私は私の理解が正しいことの確認を探しています、私はこの質問がここにあることを望みました(それが私のものかどうかに関係なく)、このよく尋ねられるがあまりよく答えられない質問に関するリソースを提供します: )
Rob Cooper、

42
また、自分の質問に答えることは、サイトを使用する有効な方法としてFAQに示されています-実際、それは奨励されるべきです。
エリックフォーブス

質問自体は少しノイズが多い(自伝)が、自分の質問に答えることは問題ありません。また、答えを見つけるための努力も、答えを見つけるために人が何をしようとしたかという傾向もありません。
エリック2015年

回答:


112

マーティン・ファウラーはこの主題について優れた記事を書い。その記事から:

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

  • ダミーオブジェクトは渡されますが、実際には使用されません。通常、これらはパラメータリストの入力に使用されます。
  • 偽のオブジェクトは実際には機能する実装を持っていますが、通常はいくつかの近道をとって、プロダクションには適していません(メモリ内データベースが良い例です)。
  • スタブは、テスト中に行われた呼び出しに対する定型の回答を提供します。通常、テスト用にプログラムされたもの以外にはまったく応答しません。スタブは、「送信」されたメッセージを記憶する電子メールゲートウェイスタブや、「送信」されたメッセージの数だけを記録するなど、呼び出しに関する情報を記録する場合もあります。
  • モックとは、ここで話しているものです。事前にプログラムされたオブジェクトで、期待される呼び出しの仕様を形成します。

私の言葉で言えば、モックオブジェクトは特定のメソッドが呼び出されることを「期待」し、通常、それらの期待が満たされない場合、ユニットテストが失敗します。スタブオブジェクトは、応答を缶詰提供(およびヘルパーライブラリによって自動生成されます)が、通常はないではない、直接ユニットテストが失敗する原因。これらは通常、テスト対象のオブジェクトが作業に必要なデータを取得するために使用されます。


2
次に、偽のオブジェクトとsutbsの違いは何ですか?おっしゃるとおり、実装する役割は同じですね。
LKM 2016年

4
@LKM偽のオブジェクトは、実際の機能を実装し、物事を行う実際のオブジェクトです。スタブは単なる「定型回答」です。Webサーバーから返されるものを模倣するハードコードされたJSON結果。
user3344977 2017

31

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

  • DataSet
  • ユーザーのリスト
  • Xmlファイル

通常、これは別のサービス(Webサービス、別のアプリケーション、データベースなど)によって提供されますが、コードのテスト容易性を向上させるために、結果は「偽造」されます。

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

スタブは、オブジェクトの状態を表現およびテストするために使用される点でモックとは異なり、モックはその相互作用をテストします。


あなたの答えをありがとう、しかし私はまだ理解していません:「インターフェースの実装」??
BKSpurgeon 2016年

6

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


1
これは正しいとは思いません。これはおそらく、住宅建設におけるこの慣行から来ています。hunker.com
12000314

3

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


この答えは、より詳細に説明されている場合に適しています。スタブメソッドの目的は何ですか。使い方は?どうしてそれが重要ですか?
エヴァンワイズバーグ2018年

ありがとう!私はプログラミングの初心者で、ソフトウェア開発について学び始めました。これまでのところ、これはスタブメソッドについて私が理解していることです。そのため、その目的、重要性、およびそれがどのように使用されるかは、本当にわかりません。しかし、スタブメソッドは実際には特定のクラスのメソッドをテストするために使用されるメソッドだと思います。実際の開発メソッドでローカル変数にいくつかの値を入力して使用し、出力が正しいかどうかを確認します。コードのバグを見つけることが重要です。他に追加または修正する必要がある場合は、コメントしてください。現在、テストについて学んでいるところです。
Nasserr 2018年

1
あなたが学んでいるのは素晴らしいことです!将来の読者がコメントに投稿する代わりに、そこから簡単に学ぶことができるように、元の回答を編集する必要があります。さらに、何かについて不明な点がある場合、なぜそれに関する権威ある回答を投稿するのですか?
エヴァンワイズバーグ2018年

1
自分で学習する場合は問題ありません。StackOverflowでは、確信がない限り回答を投稿する必要はありません。これは標準のフォーラムではありません。参照:stackoverflow.com/tour
エヴァンワイズバーグ2018年

1
ガイドと提案をありがとうございました。心から感謝する!
Nasserr 2018年

3

私は最近質問に直面し、スタブドライバーのこの比較が本当に明確で役立つことを認識しました:

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

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

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


0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.