フェイク、モッキング、スタブの違いは何ですか? 質問する

フェイク、モッキング、スタブの違いは何ですか? 質問する

これらの用語の使い方はわかっていますが、ユニット テストのフェイクモックスタブには受け入れられている定義があるかどうか疑問に思っています。テストではこれらをどのように定義しますか。それぞれを使用する可能性がある状況を説明してください。

使い方は次のとおりです:

Fake : インターフェイスを実装するが、固定データを含み、ロジックを含まないクラス。実装に応じて、単に「良い」データまたは「悪い」データを返します。

Mock : インターフェースを実装し、特定のメソッドから返される値やスローされる例外を動的に設定し、特定のメソッドが呼び出されたかどうかをチェックする機能を提供するクラス。

スタブ: モック クラスに似ていますが、メソッドが呼び出されたか呼び出されなかったかを検証する機能は提供されません。

それぞれの世代:

  • モックスタブは手動で生成することも、モック フレームワークによって生成することもできます。
  • 偽のクラスは手動で生成されます。

次のように使用します。

  • 主に自分のクラスと依存クラス間の相互作用を確認するためのモックです。
  • 相互作用を検証し、コードを通じて代替パスをテストしたら、スタブを作成します。
  • 偽のクラスは主に、データの依存関係を抽象化するため、またはモック/スタブを毎回セットアップするのが面倒な場合に使用します。

ベストアンサー1

いくつかの情報を入手できます:

からマーティン・ファウラー氏によるモックとスタブについて

偽のオブジェクトは実際には動作する実装を持っていますが、通常は何らかのショートカットを取るため、本番環境に適していません。

スタブは、テスト中に行われた呼び出しに対して定型の応答を提供しますが、通常は、テスト用にプログラムされたもの以外のものにはまったく応答しません。スタブは、呼び出しに関する情報も記録する場合があります。たとえば、電子メール ゲートウェイ スタブは、送信したメッセージ、または送信したメッセージの数だけを記憶します。

ここで言及しているのはモックです。モックとは、受信することが予想される呼び出しの仕様を形成する期待値で事前にプログラムされたオブジェクトのことです。

からxユニットパターン:

偽物: SUT が依存するコンポーネントによって提供されるものと同じ機能の非常に軽量な実装を取得または構築し、実際の代わりにそれを使用するように SUT に指示します。

スタブ: この実装は、SUT からの呼び出しに応答して、SUT 内の未テスト コード (X ページの製品バグを参照) を実行する値 (または例外) を返すように構成されています。テスト スタブを使用する主な兆候は、SUT の間接入力を制御できないために未テスト コードが発生することです。

SUT (テスト対象システム) が依存するオブジェクトと同じインターフェースを実装するモック オブジェクト。SUT でメソッドを呼び出す際の副作用を観察できないために、テストされていない要件 (X ページの製品バグを参照) が発生するのを避けるために動作検証を行う必要がある場合は、モック オブジェクトを観察ポイントとして使用できます。

個人的に

私は、Mock と Stub を使用して簡素化しようとしています。テスト対象のクラスに設定された値を返すオブジェクトの場合は、Mock を使用します。テスト対象のインターフェースまたは抽象クラスを模倣する場合は、Stub を使用します。実際、呼び方は重要ではありません。これらはすべて、本番環境では使用されず、テスト用のユーティリティ クラスとして使用されるクラスです。

おすすめ記事