【发布时间】:2010-05-05 22:42:59
【问题描述】:
当我运行单元测试时,我希望能够“存根”或创建一个模拟对象,但我遇到了 DLL Hell。
例如:构建了两个 DLL 库:A.dll 和 B.dll -- A.dll 中的类调用了 B.dll 中的类,因此在构建 A.dll 时,链接行使用 B。 lib 用于定义。
我的测试驱动程序 (Foo.exe) 正在测试 A.dll 中的类,因此它链接到 A.lib。但是,我想用简单的版本“删除” A.dll 对 B.dll 的一些调用(返回基本值、不查找数据库等)。
我无法构建只覆盖所需方法(不是整个类)并替换 B.dll 的 Override.dll,因为 Foo.exe 会 A)抱怨如果我只是删除它并放置 Override,B.dll 丢失.dll 或 B)如果我将 Override.dll 重命名为 B.dll,Foo.exe 会抱怨存在未解析的符号,因为 Override.dll 不是 B.dll 的完整实现。
有没有办法做到这一点?有没有办法将 Foo.exe 与 A.lib、B.lib 和 Override.lib 静态链接,这样它就可以工作而无需完全重建 A.lib 和 B.lib 以删除 __delcspec(dllexport)?还有其他选择吗?
【问题讨论】:
标签: unit-testing visual-c++ linker dll