テストを終了するには、テストアセンブリが依存アセンブリのシャドウコピーをプリロードしないことが重要です。
アセンブリ T は、アセンブリ A を読み込んでテストするテストフレームワークです。アセンブリ A は、B で定義されたインターフェイスに依存します。
テストの目的で、ビルド時に使用できるようにせずに、A のいくつかの静的メンバーを置き換える必要があります。
ここに私がいるジレンマを示すいくつかの疑似コードがあります:
A_assembly = Assembly.LoadFrom("A.dll");
A_type = A_assembly.GetType("TheSingleton.Master", true);
MethodInfo Master_Init_Info = type.GetMethod("Init", BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance);
//before init is called some things need to be replaced
FieldInfo semiknown = A_type.GetField("needsmocking", BindingFlags.Public | BindingFlags.Static));
??? mock_semiknown = MockRepository.GenerateMock<???>();
semiknown.SetValue((???)mock_semiknown, mock_semiknown);
//testing makes only sense if that static is replaced.
Master_Init_Info.Invoke(null, null);
- 経由でタイプにアクセスできますが、
semiknown.FieldType
それは何の役に立つのでしょうか? その情報を使用してモックを作成し、静的メンバーを置き換えることはできますか? - 型を取得し、静的メンバーを置き換えることができるとします-モックで期待値を構築するにはどうすればよいですか?