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);