gpt4 book ai didi

delphi - 如何对与第三方 COM 对象交互并实例化第三方 COM 对象的代码进行单元测试?

转载 作者:行者123 更新时间:2023-12-03 14:58:13 25 4
gpt4 key购买 nike

目前阻碍我全力投入单元测试的最大问题之一是,我编写的代码中有很大一部分严重依赖于来自不同来源的第三方 COM 对象,这些对象也倾向于相互交互(如果您需要了解,我正在使用多个帮助程序库为 Microsoft Office 编写加载项)。

我知道我可能应该使用模拟对象,但是在这种情况下我到底该怎么做呢?我可以看到,当我只需传递对已经存在的对象的引用时,这相对容易,但我的一些例程本身实例化外部 COM 对象,然后有时将它们传递给来自不同库的其他外部 COM 对象。

这里的最佳实践方法是什么?我是否应该让我的测试代码暂时更改注册表中的 COM 注册信息,以便测试的代码将实例化我的模拟对象之一?我应该注入(inject)修改后的类型库单元吗?还有哪些其他方法?

我会特别感谢 Delphi 的示例或工具,但也会对更一般的建议和更高层次的解释感到高兴。

谢谢

奥利弗

最佳答案

传统方法认为您的客户端代码应该使用包装器,它负责实例化 COM 对象。然后可以轻松地模拟这个包装器。

因为您的部分代码直接实例化 COM 对象,所以这并不合适。如果您可以更改该代码,则可以使用工厂模式:它们使用工厂来创建 COM 对象。您可以模拟工厂以返回替代对象。

是否通过包装器或原始 COM 接口(interface)访问对象取决于您。如果您选择模拟 COM 接口(interface),请记住在模拟中检测 IUnknown::QueryInterface,这样您就知道您已经模拟了所有接口(interface),特别是当该对象随后传递给其他某个 COM 对象时。

或者,查看 CoTreateAsClass方法。我从未使用过它,但它可能可以满足您的需要。

关于delphi - 如何对与第三方 COM 对象交互并实例化第三方 COM 对象的代码进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com