C++单测Mock方式
1 GTest GMock¶
GMock可以满足如下测试需求:
-
mock一个类的虚函数和非虚函数
-
mock std::function
但是如果要测试非类成员函数和虚函数,即c-style函数。
Gmock是处理c++类的,如果要mock一个c-style函数,需要定义Interface的抽象类,然后通过mock类的方式去mock c-stryle函数。
如果要mock一个c语言函数,需要使用基于链接方式的,在测试的时候链接不同的cpp实现库。如果你的程序时c语言实现的,更好的是采用c mock的框架。比如https://github.com/meekrosoft/fff。
参考:
2 c-style function mock¶
这里介绍两种mock方式,可以mock c-style function.
2.1 fff mock框架¶
使用fff mock框架,只需要引入fff.h头文件,
更多例子可以参考:https://github.com/meekrosoft/fff/tree/master/examples
2.2 借助自定义的同名同参函数¶
C++ | |
---|---|
类似可以实现用自定义的malloc函数和free函数,wrap 系统的malloc和free函数,实现统计内存情况等功能。例如:
https://github.com/Toddz1/MemLeak。
3 lmock¶
通过修改插入汇编代码,将mock函数地址设置到rax寄存器,然后jump到rax执行mock函数,可以mock 普通的函数和static函数,目前只实现了x86-64平台。
比如代码中的如下二进制,对应了jump rax。
Bash | |
---|---|
注: 可以通过gdb查看汇编和二进制以及源码
Bash | |
---|---|
3.1 C++ 工程实践(6):单元测试如何 mock 系统调用¶
https://www.cnblogs.com/Solstice/archive/2011/05/16/2047255.html
参考资料: