在 cmocka 中临时启用和禁用函数包装的正确方法?
Correct way to temporarily enable and disable function wrapping in 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 库来测试一些嵌入式 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。您现在可以使用此功能进行测试。
我最终完全按照我在问题中建议的去做了。我使用了一个全局变量,我检查了包装函数以在运行时启用和禁用模拟。