4

テストを終了するには、テストアセンブリが依存アセンブリのシャドウコピーをプリロードしないことが重要です。

アセンブリ 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);
  1. 経由でタイプにアクセスできますが、semiknown.FieldTypeそれは何の役に立つのでしょうか? その情報を使用してモックを作成し、静的メンバーを置き換えることはできますか?
  2. 型を取得し、静的メンバーを置き換えることができるとします-モックで期待値を構築するにはどうすればよいですか?
4

1 に答える 1

2

リフレクションで呼び出すことができます

var method = typeof(MockRepository).GetMethod("GenerateMock").MakeGenericMethod(semiknown.FieldType);
var mock_semiknown = method.Invoke(null, null);
于 2012-08-23T06:39:53.143 に答える