首页 > 解决方案 > 在对共享库进行单元测试时,如何用模拟实现替换函数?

问题描述

我遇到了相反的问题,即使它是由使用 -rdynamic 编译的程序加载的,您能否将共享对象编译为更喜欢本地符号?正在解决。

使用链接问题中的命名,我有一个baz调用的动态库bar,并且我有一个运行该库的测试二进制文件,它代替了它自己的假实现来bar进行测试。这在 Linux 上运行良好,因为-rdynamic用于链接。

测试的来源是https://github.com/apache/qpid-dispatch/blob/b172f501028b36d786b4c83bcee1e195cd17fcf2/tests/timer_test.c。除其他外,被模拟的函数是qd_server_timeoutqd_timer_now(即内联函数,请参阅评论)。

我不知道如何在 macOS 上实现相同的目标。那里有哪些正确的链接器选项?

标签: cmacosunit-testingmockingdynamic-linking

解决方案


目前,它通过添加__attribute__((noinline))bar( commit ) 并与-Wl,-flat_namespace( commit ) 链接来解决。-export_dynamic实际上是不需要的。

我仍在寻找替代解决方案。


推荐阅读