4

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

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

    // ... do mock stuff
}

这是正确的方法吗?

4

2 回答 2

5

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

或者您使用定义:

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

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

于 2015-04-20T06:54:50.757 回答
1

我最终完全按照我在问题中的建议做了。我使用了一个全局变量,我在包装函数中检查它来在运行时启用和禁用模拟。

于 2015-08-28T20:43:23.247 回答