有时单元测试的时候,遇到系统函数,也可以进行打桩,来测试不同的的代码分支
我们这次来讲解如何 对系统函数malloc进行打桩。
使用ctestcode工具 ,系统函数打桩只需要做如下的设置,这样malloc的桩就设置好了
[auto_mock]
_MOCK_malloc
[real_mock]
malloc
被测试代码如下,其中一个分支,只有malloc返回NULL时,才会运行到。
void * test1(int size)
{
#define TEXT "hello world\n"
void *p=malloc(size);
if (p)
{
memcpy(p,TEXT,sizeof(TEXT));
}
if (p)
{
printf("%s",p);
}else
{
printf("NG\n");
}
return p;
}
测试异常分支,malloc 返回NULL的情况。
ON_CALL(_mock,malloc)
.WillByDefault(Return(nullptr));
测试正常分支,使用MOCK_OFF关闭桩函数。
TEST_F(THE_UNIT, test1_UT_case1_MOCK_ON_OFF)
{
ON_CALL(_mock,malloc)
.WillByDefault(Return(nullptr));
MOCK_ON(malloc);
test1(20);
MOCK_OFF(malloc);
test1(20);
}
最后所有分支也轻松测试完成。
[ RUN ] hello_mock.test1_UT_case1_MOCK_ON_OFF
NG
hello world
[ OK ] hello_mock.test1_UT_case1_MOCK_ON_OFF (0 ms)
命中[ 8 ]总行数[ 8 ]覆盖率[100.0%]
本例中,所有的代码已经全部准备好了,只需要下载 C语言编码助手 ,直接导入,就可以进行实验,学习和验证。
代码实验室:系统函数打桩 | |
源代码下载, 复制到浏览器直接下载 | ctestcode.cn/test/211003_hello_mock.ctestcode |
C语言编码助手下载地址 v1.37 | |
win10 x64 版本下载 | ctestcode.cn/ctestcode_win10.zip |
linux x64 版本下载 | ctestcode.cn/ctestcode_linux_x64.zip |