2016-09-11 20 views
2

統合テストを開発するには、Autofacとmoqを使用することをお勧めしますか? 私がオンラインで見つけたサンプルとドキュメントのほとんどは、ユニットテストでこの2つを使用することに焦点を当てています。統合テストの良い例は? 統合テストでは、ボタンアップ、トップダウン、またはサンドイッチのようなアプローチを意味します。AutofacとMoqを使用した統合テスト

+0

統合テストにmoqが必要なのはなぜですか?なぜユニットテストのためにオートファックが必要でしょうか? –

+0

私の質問を最初に読んでください、私はAutofacかMoqのいずれかが必要であることについて何も書いていませんでした、私はそれが統合テスト目的のためにそれらを使用して報われば助言を求めています。 – Mindan

答えて

4

統合テストの意味を定義することをお勧めします。なぜなら、用語には受け入れられた定義がないからです。アプリケーション全体を単独でテストすること、つまり複数のクラス(おそらく数百ものクラス)を一緒にテストすることを想定していますが、外部システム(データベース、httpサービスなど)とはやり取りしないでください。

何らかの依存性注入やコントロールの逆転をプロジェクトに導入することをお勧めします。 Autofacやその他のソリューションを使用する場合でも、統合テストの利点は同じです。依存性注入により、外部世界と通信するシステムのビットを置き換えることができます。あなたのDAOは、メモリ内で動作するモックまたはスタブバージョンを使用しています。たとえば、実稼働環境では、おそらく外部のMSSQLデータベースを使用するDAOを使用しますが、統合テストではおそらくメモリ内のDictionaryまたはHashMapを使用するスタブDAOを使用します。

Moqについては、Moqを統合テストに使用することはお勧めしません。単体テストは非常に小さな領域をシステムでテストし、モックオブジェクトとのやりとりはしばしば単純です(そうでない場合は単体テストをリファクタリングする必要があります)。しかし、統合テストでは、システム全体をテストしているため、模擬しようとしているオブジェクトとのインタラクションがたくさんある可能性があります。さらに、システムが変わると、結果が同じままであっても、モックとのやりとりが変わる可能性があります。多くの場合、多くのメソッド呼び出しを設定する必要があるため、統合テストのためのモックを設定し維持することは非常に困難で面倒です。

さらに、統合テストはマルチスレッド化されている可能性があり、必ずしも同じ順序で起こるとは限りません。再び、模擬するのは難しい!

統合テストのより良いアプローチは、実際にオブジェクトのインメモリバージョンを実装することです。それは実際のものに可能な限り近づくべきです。おそらく、初期状態の設定(DAOの例では、いくつかのテストデータの設定)や出力の検査などの作業を行うために、メモリー実装でこれに追加のメソッドを追加する必要があります。統合テストの基盤が成長するにつれて、これはずっと柔軟になっています。

明らかに、私はMoqが単体テストでは非常に有用であり、統合テストではないと思います。

関連する問題