我有一个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。
答案 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。