アプリケーションではn層アーキテクチャを使用しています。3 層アプリケーションを使用し、プレゼンテーション層に MVC パターンを使用するとします。どの層をテストする必要がありますか? アプリケーションのテスト容易性ポイントを見つけるにはどうすればよいですか?
- プレゼンテーション層?
- ビジネスレイヤー
- データレイヤー
- それらのすべて?
アプリケーションではn層アーキテクチャを使用しています。3 層アプリケーションを使用し、プレゼンテーション層に MVC パターンを使用するとします。どの層をテストする必要がありますか? アプリケーションのテスト容易性ポイントを見つけるにはどうすればよいですか?
確実に動作することを確認したいレイヤーのみをテストしてください。上記の3つすべてが機能することが重要であるように思われます。それらのいずれも削除したくないでしょう。
設計されていない既存のソフトウェアのテスト容易性ポイントを見つけようとすることは、困難な場合があります。レガシーとはテストのないコードと定義されている、この問題について説明している良書『Working Effectively with Legacy Code 』があります。基本的に、テスト容易性を考慮して設計しない場合、それを押し込むのは難しい場合があり、おそらくリファクタリングが必要になるでしょう。
秘訣は、テスト インフラストラクチャをコードに追加することです。モック、スタブ、およびその他のテスト コンポーネントを追加して、テスト対象のビットだけを分離できるようにします。これは、DB をテストする場合に役立ちます。実際のクエリを実行したくない場合は、時間がかかりすぎて、テストを高速にしたい場合に役立ちます。依存性注入は、C++/C や Java などのより静的な言語に役立ちます。
単体テストのコンテキストにおける「単体」とは何ですか? それは、コードのテスト可能な最小部分として、ユニットとして識別するものです。
最近では、ほとんどの人がクラスまたはメソッドを単位として選択します。同じことを行うと、すべてのレイヤーに単体テストできるユニットが含まれるため、質問に対する答えはそれらすべてをテストすることです。