私はモッキングと依存性注入に不慣れで、いくつかのガイダンスが必要です。
私のアプリケーションは、BLL が DAL を参照し、UI が BLL を参照するが DAL を参照しない典型的な N 層アーキテクチャを使用しています。かなり簡単です。
たとえば、次のクラスがあるとします。
class MyDataAccess : IMyDataAccess {}
class MyBusinessLogic {}
それぞれが別のアセンブリに存在します。
MyBusinessLogic のテストで MyDataAccess をモックしたいと考えています。そこで、MyBusinessLogic クラスにコンストラクターを追加して、依存性注入用の IMyDataAccess パラメーターを取得しました。しかし、UI レイヤーで MyBusinessLogic のインスタンスを作成しようとすると、DAL への参照が必要になります。
MyBusinessLogic でデフォルトのコンストラクターを定義して、デフォルトの IMyDataAccess 実装を設定できると考えましたが、これはコードのように見えるだけでなく、実際には問題を解決しませんでした。署名に IMyDataAccess を持つパブリック コンストラクターがまだあります。そのため、UI レイヤーは、コンパイルするために DAL への参照を必要とします。
私が考えている解決策の 1 つは、IMyDataAccess パラメーターを使用して MyBusinessLogic の内部コンストラクターを作成することです。次に、テスト プロジェクトのアクセサーを使用してコンストラクターを呼び出すことができます。でもあの匂いはまだある。
ここでの一般的な解決策は何ですか。私は何か間違ったことをしているに違いない。どうすればアーキテクチャを改善できますか?