私のコードは、その奥深くでシングルトン パターンを使用するサード パーティのライブラリを使用しています。最初のアクセス時に、ライブラリは Windows 環境変数を使用して、ロード元の構成フォルダーを識別します。
ただし、単体テストのさまざまなセットでさまざまなフォルダーに対して実行したいと考えています。理想的には、すべての単体テスト クラスなどの構成フォルダーを指定します。
サード パーティのライブラリは巨大なオブジェクト モデルであり、私のコードはそれらの上にある拡張メソッドのセットにすぎません。ライブラリ全体を簡単にモックアウトする方法はありません。
テスト クラスごとに新しい appdomain を作成する方法はありますか? ロード テストには、実行中のテスト アセンブリ間にドメインを作成するための設定があることを知っています。私の場合、それは多くのアセンブリになり、単体テスト testrunner でこの設定を設定できるかどうか、またはどのように設定できるかはよくわかりません。
または、Typemock Isolator または JustMock のいずれかを購入して、シングルトンが「null」を返すようにすることを検討しており、その結果、サードパーティのライブラリが新しいものをロードします。逆コンパイルされたコードを調べたところ、目的の結果が得られたようです。もちろん、そこにはもっと「いいもの」が隠されているかもしれません。
これらは不自然なアプローチです。私が本当に望んでいるのは、テスト、テスト クラス、またはテスト アセンブリ間で完全な appdomain を "フラッシュ" することです。
自動テストで構成フォルダーを切り替える必要がある場合は、速度を犠牲にしてもかまいません。red-green-refactor サイクルには、おそらく複数の構成フォルダーが含まれることはありません。
これを達成する方法について何か提案はありますか?
EDIT 異なるテスト アセンブリによってシングルトンが消去されることを発見しました。したがって、テストの対象となる依存関係や問題のドメインではなく、実行する構成に従ってテスト アセンブリを整理することができます。