あなたの例で示したことは、実際の模擬よりも擬似/スタブのほうが多いことです。従属オブジェクトからあらかじめ缶詰めされた動作のみを望む場合は、嘲笑フレームワーク。
あり、実際Mocks aren't Stubsを議論Martin Fowler氏による標準的な記事があり、私はそれから次の段落引き上げました:
ここでの重要な違いは、我々は順序が右をしたことを確認し 方法ですが 倉庫とのやりとりにおけるもの。状態確認では、 は 倉庫の状態に対してアサートします。モックは の動作を使用して動作します。代わりに をチェックして、オーダーがウェアハウスで正しい コールを行ったかどうかを確認します。
本質的にmockでは、テスト中のメソッドが依存関係にどのように作用するかを確認しようとしています。モックには期待があり、メソッドが実行された後にそれらの期待を検証します。
もちろん、ケースモックで独自のケースを作成することもできますが、フレームワークを使用すると時間が大幅に短縮され、より読みやすいテストが行われ、テストのエラーを回避できます。
これは、あなたが複雑になってきたことを考えると、特に当てはまることですが、入力パラメータに応じてさまざまな値を使って特定の依存クラスをさまざまな回数呼び出すテスト方法を想像してみてください。あなた自身のために、しかし、良いmockingフレームワークを使用して自明です。あなたはおそらく、少なくともテストしたい
public void PrintForeignOrders(List<Orders> orders)
{
foreach(var order in orders)
{
if (order.IsForeign)
{
printer.PrintOrder(order.Number, order.Name);
}
}
}
::、いくつかのコードを実証し、このPrintOrders方法を(愚かな例を言い訳)想像する
- リストが空何もないときにされ
- 外国注文がある場合は、それが印刷されます
- 2つの注文が両方とも印刷されている場合(正しい番号と名前で)
注入されたプリンタオブジェクトに対してこれらのテストを設定すると、良い模擬フレームワークで、ちょっとしたキーストロークになります。
いくつかの洞察力を提供するかもしれない同様の質問があります:http://stackoverflow.com/questions/300177/why-do-i-need-a-mocking-framework-for-my-unittests –
@ Jason Downそれは同じような質問ではなく、同じ質問であると私は言うだろう。重複して投票すると投票しました。 –
@Don Roby:ええ、まあまあ、まったく同じ質問ですね。 –