目前阻碍我从单纯测试中获取热量的一个最大问题是我编写的代码中很大一部分在很大程度上依赖于来自不同来源的第三方COM对象,这些对象也倾向于相互交互(I'如果您需要知道,请使用多个帮助程序库为Microsoft Office编写加载项.
我知道我应该使用模拟对象但在这种情况下我究竟会怎么做呢?我可以看到,当我必须传递对已经存在的对象的引用时相对容易,但是我的一些例程本身实例化外部COM对象,然后有时将它们传递给来自不同库的其他外部COM对象.
这里最好的做法是什么?我是否应该让我的测试代码暂时更改注册表中的COM注册信息,以便测试的代码将实例化我的一个模拟对象?我应该注入修改后的类型库单位吗?有什么其他方法吗?
我会特别感谢Delphi的示例或工具,但同样对更一般的建议和更高级别的解释也同样满意.
谢谢,
奥利弗
传统方法表示您的客户端代码应该使用包装器,它负责实例化COM对象.然后可以轻松地模拟这个包装器.
因为你有部分代码直接实例化COM对象,所以这并不适合.如果您可以更改该代码,则可以使用工厂模式:它们使用工厂来创建COM对象.您可以模拟工厂以返回替代对象.
是通过包装器还是通过原始COM接口访问对象取决于您.如果您选择模拟COM接口,请记住在模拟中检测IUnknown :: QueryInterface,因此您知道您已经模拟了所有接口,特别是如果该对象随后传递给其他COM对象.
或者,查看CoTreateAsClass方法.我从来没有使用它,但它可能会做你需要的.