使用Rhino Mocks模拟COM接口

时间:2010-08-09 22:09:01

标签: c# .net com rhino-mocks

我有一个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测试失败时,总是说预期:1实际:0表示对COM接口的任何期望。

使用Rhino.Mocks 3.6。

2 个答案:

答案 0 :(得分:13)

看起来这是.NET 4.0的“Type Equivalence”的问题。有关详细信息,请参阅此处:http://code.google.com/p/moq/issues/detail?id=254

修复(如上所述)很容易添加:

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

进行单元测试。

答案 1 :(得分:2)

我通过此解决方案解决了同样的问题(来自问题How to test a COM dependent object in C#):https://stackoverflow.com/a/4333388/185498

  

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