2009-10-05 13 views
14

私はちょうどこの面白いを見ましたYouTube Video about unit testing(スタンドが批判されているところでは、ユーモアが損なわれている場合はスキップして、良い単位テストを行っていないため、彼のチームを偽装した偽の字幕でヒトラーです。しかし、私はスタブに何が間違っているのか理解していません。スタブのユニットテストで何が問題になっていますか?

私は嘲笑フレームワークを使い始めていないし、痛みを感じないようにしていない。

私は(ファウラーの分類法を使用して)、いつかラインの下の世界のためにhaving chosen handwritten stubs and fakes instead of mocks (like Rhinomock etc)?痛く中アム

モックとスタブ手書きの間取り出すための考慮事項は何ですか?

+1

あなたはモックフレームワークを(私はサイを使用)を使用して、自分自身にそれを借りています。 TDDの生活を楽にするために多くのことがあります。 – mxmissile

答えて

11

スタブには何も問題はありません。スタブ、モック、スパイのためのスペースがあります。すべてが「テストダブル」ですが、Mocks and Stubs aren't Spiesで説明されているような異なる目的を持っています:

[...]に移動する前に、私は 私はもともと ジェラルドMeszaros' xUnit Patterns bookで発見され、ここで使用 でいくつかの用語を明確にし、定義したいと思います。

  • ダミーオブジェクトは、テスト対象のシステム に渡されたが使用されなかったプレースホルダーオブジェクトです。
  • Aテストスタブは、間接的な入力と被試験システムを提供
  • A試験のスパイは、被試験システムは、モックオブジェクトは、間接の両方でテスト中のシステムを提供する
  • 行わ正しい間接出力することを確認する方法を提供入力 と間接出力

を確認する方法[...]そして、あなたがこの便利なチャートを聞かせすることができます あなたの決定を導く:

alt text http://www.hamletdarcy.com/files/2007/MocksAreNotSpies.jpg

PS:Mockito - The New Mock Framework on the Blockも読む価値があります。あなたはケースAに偽の何かにそれを伝える場合

スタブと呼ばれる:

+0

+1。チャートのリンク – TrueWill

+1

0.5、0.5、それは基本的に間違っているのです。モックはアサーションで失敗する可能性があり、メンテナンスが容易であり、すべてを使いやすくなっています。私はチャートが古くなっているかもしれないと思っています。古い古いフレームワークや古くなった言語/バージョンのJavaでのフレームワークです。 (本当に投票-1、チャートは悪い) – guerda

+1

-1のためのチャートの –

5

モックは、スローインするのがはるかに簡単です。それらは、最小限の定型文を使用して任意のメソッドの動作をオーバーライドできるように予めスタブされたクラスの実際のインスタンスです。

次のような考慮事項はほとんどありません。メソッドのいずれかに対処したくない場合は、ノーオペレーションとして機能させるか、テストに失敗するかを選択できます方法は事実上コードなし。

あなたがクラスをスタブアウトすると、どれくらいの定型文が得られますか?あなたのクラスが最終的な場合は、どのように扱いますか?最初にクラスパス上のスタブを取得するためにトリックを演じますか、あるいは別のソースを使用しますか?

私はちょうどモックで始めることをお勧めします。

0

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

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

3

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

技術的な知識を得たい場合は、モックは期待通りの検証が可能な「スマートな」オブジェクトです。スタブは、プリセット値を返すダミーオブジェクトです。 Mocks Aren't Stubsを参照してください。

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

私はあなたが傷ついている世界にはいないと思います。痛みを感じ始めていないのであれば、おそらく孤立/嘲笑フレームワークはまだ必要ありません。あなたがそうすると、手書きのスタブ/偽装をしても何も傷つけません。

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

私はMoqが大好きです。私はスタブを作成するためにRhino Mocksより使いやすくなっています。

8

は、私は(ロイOsherove、ユニットテストの芸術の著者によって導入された)次の用語を使用しますメソッドはそのようなパラメータで呼び出されます。しかし、あなたはまた、そのような呼び出しが、その後、このような偽のモックと呼ばれ、N回を実際に行われたか正確に行われたことを確認した場合。要するに。あなたがVerify()を呼び出してからそれを模擬しない限り、偽物はスタブです。

明らかに、あなたは他の人にいくつかのケースではスタブとモックを使用する必要があります。だから、スタブを丸ごと批判するのは間違っているだろうし、スタブだけを使うのはおそらく間違っているだろう。

モッキングフレームワーク(代替用語:分離フレームワーク)の使用を開始していない場合は、それらに注目してオプションを頻繁に再評価する必要があります。私は手動のモックからNMock2へMoqへ非常に迅速に行きました。ここでは、彼らが使用するものを示すプログラマーの興味深いpollがあります。手動のモック/スタブは少数しかありませんが、あまり一般的ではありません。

+1

ユニットテストのアート(良い本)とMoq(良いツール)の+1。 – TrueWill

関連する問題