データベース、ファイルシステム、およびいくつかの外部Webサービスを実行して対話するWCFサービスがあり、結果を作成し、Xmlシリアライズして最終的に返します。
このソリューションのテストを書きたいのですが、その方法を考えています (すべて依存性注入と契約による設計を使用しています)。
私が取ることができる3つの主なアプローチがあります。
1) コード/メソッドの最小単位を選択し、それに対するテストを作成できます。1 つのクラスを選択し、その依存関係 (他のクラスなど) から分離します。品質は保証されますが、それらを書くには多くの時間がかかり、遅いです。
2) 外部システムとの対話のみをモック可能にし、要求が行われてから応答がシリアル化されて返されるまでの主なシナリオをカバーするいくつかのテストを作成します。これにより、クラス間のすべてのやり取りがテストされますが、すべての外部リソース アクセスがモックされます。
3) 外部 Web サービスとの対話、ファイル アクセス、データベース アクセスなどが行われるテスト環境をセットアップできます。その後、エンドツーエンドでテストを記述します。これには、環境のセットアップと、他のすべてのシステムへの依存が稼働している必要があります。
#1については、私が持っているすべてのメソッドまたはコードのテストを書くために時間/お金/エネルギーを投資しても意味がありません。つまり時間の無駄です。
#3 については、外部リソース/システムに依存するため、セットアップと実行が困難です。
#2、私にとって最良の選択肢のようです。テストすべきものをテストするためです。私のシステムとそのすべてのクラスのみ、および他のすべての外部システムをモックします。
基本的に、単体テストを数年経験した後の私の結論は、単体テストを書くことは避けるべき無駄であり、代わりに分離されたシステムテストが投資に対する最良のリターンであるということです。
最初にテスト (TDD) を書き、次に製品コードを書くつもりだったとしても、やはり #2 がベストだと思います。
これについてどう思いますか。アプリケーションの小さな単体テストを作成しますか? 時間/予算/エネルギーを有効に活用する良い方法だと思いますか?