15

スタブが丸く批判されるユニットテスト(ユーモアが損なわれている場合はスキップしてください)についてのこの面白いYouTubeビデオを見たところです。しかし、私はスタブの何が悪いのか理解していません。

私はモックフレームワークを使い始めていませんし、それを使わないことによる苦痛を感じ始めていません。

私は、モック(Rhinomockなど)の代わりに手書きのスタブと偽物を選択して、いつか傷ついた世界にいますか?(ファウラーの分類法を使用)

モックと手書きのスタブを選択する際の考慮事項は何ですか?

4

5 に答える 5

14

スタブには何の問題もありません。スタブ、モック...そしてスパイのための余地があります。すべて「テストダブル」ですが、モックとスタブで説明されているように目的は異なりますが、スパイではありません

[...]先に進む前に、ここで使用されているいくつかの用語を明確にして定義したいと思います。これは、GerardMeszarosのxUnitパターンの本で最初に発見したものです。

  • ダミーオブジェクトは、テスト対象のシステムに渡されますが、使用されることのないプレースホルダーオブジェクトです。
  • テストスタブは、テスト対象のシステムに間接入力を提供します
  • Test Spyは、テスト対象のシステムが正しい間接出力を実行したことを確認する方法を提供します
  • モックオブジェクトは、テスト対象のシステムに間接入力と間接出力を検証する方法の両方を提供します

[...]そして、この便利なチャートにあなたの決定を導くことができます:

代替テキスト

PS:Mockito-ブロック上の新しいモックフレームワークも読む価値があります。

于 2009-10-06T00:57:38.607 に答える
9

私は次の用語を使用します(Art of Unit-Testingの作者であるRoyOsheroveによって導入されました)。

そのようなパラメータを使用してメソッドが呼び出された場合に何かを偽造するように指示した場合、偽物スタブと呼ばれます。しかし、そのような呼び出しが実際に行われたか、正確にN回行われたことも確認した場合、そのような偽物はモックと呼ばれます。要するに。偽物は、Verify()を呼び出してモックでない限り、スタブです。

明らかに、場合によってはスタブを使用し、他の場合にはモックを使用する必要があります。したがって、スタブを丸く批判することはおそらく間違っており、スタブを排他的に使用することもおそらく間違っています。

モックフレームワーク(別名:分離フレームワーク)の使用を開始していない場合は、それらを監視し、オプションを頻繁に再評価する必要があります。手動モックからNMock2、Moqへと非常に迅速に移行しました。これは、プログラマーが何を使用しているかを示す興味深い世論調査です。手動のモック/スタブは少数派ですが、それほど珍しいことではありません。

于 2009-10-06T01:03:28.517 に答える
5

モックは簡単に投入できます。モックはクラスの実際のインスタンスであり、最小限のボイラープレートで任意のメソッドのアクションをオーバーライドする機能が事前にスタブされています。

次のような小さな考慮事項がたくさんあります。どのメソッドも処理したくない場合は、ノーオペレーションとして機能させるか、テストに失敗するか(選択)、どちらの方法でも実質的にコードはありません。 。

クラスをスタブアウトすると、どのくらいの定型文が得られますか?クラスが最終的な場合、どのように処理しますか?最初にクラスパスにスタブを配置するためのトリックを実行しますか、それとも別のソースを使用しますか?

私はモックから始めることをお勧めします-それはいたるところに簡単です。

于 2009-10-05T23:09:29.630 に答える
3

モックの代わりにスタブを使用しても問題はありません。

技術を習得したい場合、モックは検証可能な期待値を持つ「スマート」オブジェクトです。スタブは、プリセット値を返すダミーオブジェクトです。モックはスタブではありませんを参照してください。

しかし、多くの人(私自身を含む)は、モックを使用した動作テストではなく、スタブを使用した状態テストを行うことを好みます。テスト対象のクラスにスタブを挿入し、メソッドを呼び出してから、テスト対象のクラスの状態を確認します。クラスの内部が引数Yを持つモックオブジェクトのメソッドXを呼び出したと主張するよりも、テストの脆弱性が低くなる傾向があります。

私はあなたが傷ついた世界にいるとは思わない。痛みを感じ始めていない場合は、おそらくまだ分離/モックフレームワークは必要ありません。そうした場合、手書きのスタブ/偽物を持っていても何も害はありません。

インターフェースがたくさんある場合、またはインターフェースにメソッドがたくさんある場合は、分離/モックフレームワークを使用すると、スタブを手動でコーディングするよりも多くの時間を節約できます。

私はMoqが大好きです。スタブの作成には、RhinoMocksよりも使いやすいと思います。

于 2009-10-06T00:39:12.103 に答える
0

モックとスタブは、実際の単体テストを実行するために使用されます。すべての依存関係をモックし、クラスを個別に単体テストします。

私は現在、モックとスタブにMOQを使用しています。

于 2009-10-06T00:22:38.957 に答える