我需要在linux头文件中定义模拟宏:
#include <asm/types.h>
#include <linux/netlink.h>
for (msg_ptr = (struct nlmsghdr *) reply;
NLMSG_OK(msg_ptr, len);
msg_ptr = NLMSG_NEXT(msg_ptr, len))
{
// do something
}
NLMSG_OK
在某些linux标头linux/netlink.h
中定义。
如何使用google mock进行模拟?
google mock是否支持模拟宏?
答案 0 :(得分:2)
如何使用google mock进行模拟?
你不能。
google mock是否支持模拟宏?
没有
首先,宏不是函数!它们只是从预处理阶段扩展的文本处理模板。
好的,我们假设宏以某种方式扩展为全局函数调用,他们在FAQ中给出了以下答案:
我的代码调用静态/全局函数。我可以嘲笑它吗?
你可以,但你需要做一些改变。
通常,如果您发现自己需要模拟静态函数,则表明您的模块耦合得太紧(并且灵活性较低,可重用性较低,可测试性较差等)。你可能最好定义一个小接口并通过该接口调用该函数,然后可以很容易地模拟它。这最初是一项工作,但通常会很快收回成本。
此Google测试博客post说得非常好。看看
关于你的评论“你使用#undef和re #define是什么意思?”:
我的意思是你需要使用自己的宏定义编译测试代码,而不是注入Google Mock类/函数。
#if defined(UNDER_TEST)
#undef NLMSG_OK
#define NLMSG_OK(msg_ptr, len) \
// your mocking code
#endif