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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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中临时启用和禁用功能包装的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章

在单个操作上禁用和重新启用按钮

如何在 Firebird 2.1 中临时禁用表中的所有约束?

在 Azure WebJob 中动态启用/禁用触发功能

如何在按钮单击时在一个视图控制器中正确启用和禁用约束

如何在 Spring Web App 中临时禁用 Spring Security

asp.net core 中优雅的进行响应包装