代码之家  ›  专栏  ›  技术社区  ›  Iñaki Elcoro

如何在C中测试COM相关对象#

  •  5
  • Iñaki Elcoro  · 技术社区  · 15 年前

    我试图用一个依赖于COM接口的对象来做TDD。我考虑过在进行开发测试时模拟COM接口,并在集成测试中真正做到这一点。

    但是,我无法模拟COM接口,我尝试了Moq,但它引发了一个异常:

    System.TypeLoadException未处理 Message=无法加载类型“Castle.Proxies.iTunesAppProxy” 从组件'DynamicProxyGenAssembly2, 版本=0.0.0.0,区域性=中性, PublicKeyToken=null'。类型为 标记为符合类型 等价,但它要么有泛型 COM导入接口,枚举, 或委派

    其他框架是否可行? 如何使用COM相关对象进行TDD?

    提前谢谢!或委派

    4 回复  |  直到 15 年前
        1
  •  2
  •   Gutzofter    15 年前

    我建议您拥有COM对象接口的所有权,这就是 会起作用。

    如果您无法访问源代码,则必须创建自己的抽象来包装COM对象,否则在整个代码中都会有第三方调用。

    [编辑]

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

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

        2
  •  5
  •   LordJim    14 年前

        3
  •  2
  •   Doron Levi    11 年前

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

    Castle.DynamicProxy.Generators.AttributesToAvoidReplicating.Add(typeof (TypeIdentifierAttribute));
    
        4
  •  1
  •   Alexander Beletsky    15 年前

    好吧,我觉得没有直接的方法可以做到这一点,我不确定一些模拟框架是否可以模拟COM。

    我脑子里想的。。

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

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