代码实验室:C语言 代码测试 之 代理函数
有时单元测试的时候,需要检验 子函数的入参。如下代码,caculate被调用时,想要获取子函数 square的参数 value 的值。
这时就需要用到 代理函数的功能。
int square( int value)
{
return value*value;
}
int caculate(int count)
{
int ret=0;
for (int i=1;i<count;++i)
{
ret+=square(i);
}
return ret;
}
gmock代理函数语法:
ON_CALL(_mock,function)
.WillByDefault(my_function);
单元测试代码
代码里申明了代理函数 my_square, 注意代理函数的申明需要和原函数square一致
// 单元测试之 代理函数
int my_square( int value)
{
printf("proxy got value :%d\n",value);
return square(value);
}
TEST_F(THE_UNIT, case_test1)
{
ON_CALL(_mock,square)
.WillByDefault(my_square);
caculate(4);
}
设置代理后,caculate函数里每次调用square,都会运行代理函数,my_square。
my_square获取到 value,后再调用原函数square进行处理。
运行结果,value的变化都获取到了,是不是非常简单好用?
[ RUN ] test_proxy.case_test1
proxy got value :1
proxy got value :2
proxy got value :3
[ OK ] test_proxy.case_test1 (0 ms)
本例中,所有的代码已经全部准备好了,只需要下载 C语言编码助手 ,直接导入,就可以进行实验,学习和验证。
代码实验室:让struct支持关键字赋值 | |
源代码下载, 复制到浏览器直接下载 | ctestcode.cn/test/0521_proxy_function.ctestcode |
C语言编码助手下载地址 v1.35 | |
win10 x64 版本下载 | ctestcode.cn/ctestcode_win10.zip |
linux x64 版本下载 | ctestcode.cn/ctestcode_linux_x64.zip |