c-在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

添加mock函数testrongtrdup。您现在可以使用此函数进行测试。

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

相关内容

  • 没有找到相关文章

最新更新