测试:gmock"/>
测试:gmock
文章目录
- 简介
- 使用总结
简介
这个头文件是将全局函数的mock,是在gmock的上层,又做了一层全局函数的简化,方便使用。
使用总结
最近遇到了一个问题,和这个的使用相关,先总结如下;
这个头文件实现的宏定义:MOCK_GLOBAL_FUNC*_;
主要的是一个类定义,和两个全局符号:一个全局instance对象,一个全局的mock函数;在这个mock函数里调用instance的方法来实现mock机制的内部逻辑判断。如下两个符号:
std::unique_ptr< gmock_globalmock_##Method > gmock_globalmock_##Method##_instance;\
GMOCK_RESULT_(tn, __VA_ARGS__) ct Method() constness { \MOCK_GLOBAL_CHECK_INIT(Method); \return gmock_globalmock_##Method##_instance->Method();\}\
如果多个cpp,同时使用这个宏MOCK_GLOBAL_FUNC*_,可能导致符号重复定义的错误。如果,为了避免这个符号重复定义而,将这两个符号改成static,也不是好的选择。因为可能需要设置stub的时候,需要每个cpp里都要设置stub。
最合理的方式是:在使用的时候,对需要mock的全局函数,单独设置一个cpp文件,单独进行编译,然后再编写一个接口函数的头文件,使用extern关键字,将这个mock函数展现出来,链接时同时使用之前单独编译的目标文件。提供给外界的只是这个接口头文件。
#define INTF_MOCK_GLOBAL_FUNC0_(tn, constness, ct, Method, ...) \
class gmock_globalmock_##Method; \
extern std::unique_ptr< gmock_globalmock_##Method > gmock_globalmock_##Method##_instance;\
extern GMOCK_RESULT_(tn, __VA_ARGS__) ct Method() constness;
更多推荐
测试:gmock
发布评论