mock
1.意义
改变某个系统调用、库函数…等原来的行为,使其返回某些特定的值,就可以让代码逻辑进入到各种乱七八糟的分支。
2.例子
使用lmock进行测试wangyongfeng5/lmock: A dynamic mock tool for C/C++ unit test on Linux&MacOS X86_64 (github.com)
原函数
int global(int a, int b){
return a+b;
}
桩函数
int fake_global(int a, int b){
//1,参数检验
assert(a==2);
assert(b==3);
//2,给定特殊返回值,配合被测试代码走特殊分支
return b-a;
}
代码插桩
assert(global(3, 2) == 5);
//通过mock调用,完成函数动态替换
assert(0 == mock(&global, &fake_global));
//调用mock后的函数,可以看到返回值变了
assert(global(3, 2) == 1);
//结束mock
reset();
//函数行为恢复
assert(global(3, 2) == 5);
...