【问题标题】:Using Reflection to create a Mock of an interface that is unknown during buildtime使用反射创建在构建时未知的接口的模拟
【发布时间】:2012-05-25 14:13:10
【问题描述】:

为了结束测试,我的测试程序集不会预加载依赖程序集的影子副本,这一点很重要。

Assembly T 是加载和测试 Assembly 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. 假设我得到了类型并且能够替换静态成员 - 如何在模拟中建立我的期望?

【问题讨论】:

    标签: c# reflection dll rhino-mocks end-to-end


    【解决方案1】:

    你可以通过反射调用它

    var method = typeof(MockRepository).GetMethod("GenerateMock").MakeGenericMethod(semiknown.FieldType);
    var mock_semiknown = method.Invoke(null, null);
    

    【讨论】:

      猜你喜欢
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-12
      相关资源
      最近更新 更多