为了结束测试,重要的是我的测试程序集不会预加载依赖程序集的影子副本。
程序集 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
但这对我有什么好处?我可以以某种方式使用该信息来创建模拟并用它替换静态成员吗? - 假设我得到了类型并且能够替换静态成员 - 我如何在模拟中建立我的期望?