代码之家  ›  专栏  ›  技术社区  ›  Adam

使用Rhino Mocks模拟COM接口

  •  5
  • Adam  · 技术社区  · 16 年前

    我有一个COM库,我必须在我的应用程序中引用它,我试图模仿它的接口。

    当我这样做的时候我会得到例外 MockRepository.GenerateMock<IAmAComInterface>();

    当我这样做时,我不会得到例外: MockRepository.GenerateDynamicMockWithRemoting<IAmAComInterface>(); 但我的期望都没有得到证实。

    我做错什么了吗?

    现在,我有一堆包装我所有的COM接口,我正在嘲笑它们,但我真的不想包装一切。

    编辑:
    generateMock例外:
    System.TypeLoadException

    信息如下:
    The type is marked as eligible for type equivalence, but either it has generic parameters, or it is not a structure, COM imported interface, enumeration, or delegate.

    当使用GeneratedynamicMockWithRemoting测试失败时,对于COM接口上的任何期望,总是说expected:1 actual:0。

    使用Rhino.Mocks 3.6。

    2 回复  |  直到 11 年前
        1
  •  13
  •   PatrickSteele    16 年前

    看起来这是.NET 4.0的“类型等效”问题。有关更多详细信息,请参阅: http://code.google.com/p/moq/issues/detail?id=254

    通过添加以下内容,修复(如上所述)很容易:

    Castle.DynamicProxy.Generators.AttributesToAvoidReplicating.Add(typeof (TypeIdentifierAttribute));
    

    进行单元测试。

        2
  •  2
  •   Community Mohan Dere    9 年前

    我用这个方法解决了同样的问题 How to test a COM dependent object in C# ): https://stackoverflow.com/a/4333388/185498

    对于包含COM接口的程序集,尝试将“嵌入互操作类型”设置为false。