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 回答