在 cmocka 中临时启用和禁用函数包装的正确方法?

标签 c unit-testing cmockery cmocka

我正在使用 cmocka用于测试一些嵌入式 C 代码的库。根据文档,我使用 __wrap_ 前缀来模拟函数,这样我就可以隔离我的单元测试。但是,一旦我这样做,所有对该函数的调用将永远转到包装函数。我如何在某些情况下重新启用真正的功能,以便我可以测试它或允许其他功能使用它?在我看来,唯一的方法是使用全局字段作为开关来调用真正的函数,如下所示:

int __wrap_my_function(void) {
    if (g_disable_wrap_my_function) {
        return __real_my_function();
    }

    // ... do mock stuff
}

这是正确的做法吗?

最佳答案

您只需在没有 -wrap 命令行选项的情况下进行编译。

或者你使用定义:

#include <cmocka.h>
#ifdef UNIT_TESTING
#define strdup test_strdup
#endif

添加模拟函数 test_strdup。您现在可以使用此功能进行测试。

关于在 cmocka 中临时启用和禁用函数包装的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29703687/

相关文章:

c - write() 和 read() 不适用于 stdio 而不是 fifo

c++ - 如何编译 C++ 代码并将其与已编译的 C 代码链接?

c - 使用 Cmockery 验证函数指针是否相等

c - 我如何在我的项目中使用 cmockery

c++ - 可以从文件列表创建项目的 C/C++ 编辑器

C 编程为什么我的代码不能运行?

c - 如何用C语言从文件中输入大数据

c# - 测试 Microsoft Surface 应用程序的最佳方式

ios - 使用 Kiwi 测试核心数据实体的后台保存

java - 知道任何可嵌入的 NNTP 服务器吗?