如何使用谷歌模拟模拟宏功能

时间:2015-10-15 13:09:50

标签: c++ c googlemock

我需要在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是否支持模拟宏?

1 个答案:

答案 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