如何在C#中测试COM依赖对象

我试图用一个依赖于COM接口的对象来做TDD。 我虽然在进行开发测试时嘲笑COM接口,但在集成测试中做到了真实。

但是,我无法模拟COM接口,我尝试使用Moq,并抛出exception:

用户代码未处理System.TypeLoadException消息=无法从程序集“DynamicProxyGenAssembly2,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null”加载类型“Castle.Proxies.iTunesAppProxy”。 该类型被标记为符合类型等效,但它具有通用参数,或者它不是结构,COM导入的接口,枚举或委托

是否可以与其他框架一起使用? 你如何使用COM依赖对象进行TDD?

在此先感谢!或代表

我建议你取得COM对象接口的所有权,这就是依赖倒置原则会发挥作用的地方。

如果您无权访问源代码,则必须创建自己的包装COM对象的抽象,否则您将在整个代码中进行第三方调用。

[编辑]

现在抽象应该能够被嘲笑。 包装器的实际实现将COM对象作为HAS-A关系。

然后,您将需要对实现进行集成测试。

您需要将COM对象本身视为类似于数据库或图形呈现引擎或Web服务。

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

好吧,我认为没有直接的方法,不确定一些模拟框架可以模拟COM。

我心中有什么……

你有一些COM接口,ISomeThing和COM对象实现了这个接口CoSomeThing,这是一些真正的实现。 您应该实现另一个COM组件,它将实现相同的接口,但实际上只是模拟它 – CoSomeThingMock。

在您的代码中,您实例化CoSomeThingMock,而不是CoSomeThing并使用它。

 var component = new CoSomeThingMock(); var testObject = new Tested(component); 

您需要在初始化部分中添加以下内容,如此处所述:https://code.google.com/p/moq/issues/detail?id = 254

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