【UT】UnitTest Fake

本文深入解析了FakeFunctionFramework的原理及应用,重点介绍了如何在单元测试中使用Fake来模拟C函数的返回值,提供了myFake.h和myFake.cpp的示例代码,并通过GoogleTest展示了具体的测试案例。

UnitTest Fake

什么是Fack
  • Fake Function Framework ,是一种实体的模拟。
  • Fake是一种虚假的实现,可以自定义返回的结果。
  • 简单理解的话,Fake用于C函数。用来模拟函数的返回值。
  • 个人理解,Mock用于C++(对象),Fack用于C(函数)
例子
  • 相关头文件,在fake库中提供,自行搜索下载吧。
  • myFake.h

#ifndef MYFACK_H
#define MYFACK_H

#ifndef __cplusplus
#    error ERROR: This file requires C++ compilation (use a .cpp suffix)
#endif
#include <fff.h>
#include <fffext.h>

#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>


// 声明要Fake的函数为socket
// 返回值类型 int
// socket的三个参数,类型均为 int
DECLARE_FAKE_VALUE_FUNC3(int, socket, int, int, int);
// 声明要fake的三个函数
DECLARE_FAKE_VALUE_FUNC3(int, bind, int, const sockaddr*, socklen_t);
DECLARE_FAKE_VALUE_FUNC3(int, connect, int, const sockaddr*, socklen_t);
DECLARE_FAKE_VALUE_FUNC1(int, close, int);

#endif
  • myFake.cpp
#include "myFake.h"

DEFINE_FFF_GLOBALS;

DEFINE_FAKE_VALUE_FUNC1(void*, malloc, size_t);
DEFINE_FAKE_VALUE_FUNC3(int, socket, int, int, int);
DEFINE_FAKE_VALUE_FUNC3(int, bind, int, const sockaddr*, socklen_t);
DEFINE_FAKE_VALUE_FUNC3(int, connect, int, const sockaddr*, socklen_t);
DEFINE_FAKE_VALUE_FUNC1(int, close, int);
  • 这里为用GoogleTest,做UT时使用。
// ... someCode

TEST_F(TestXXX, testSocket)
{
    // Fake 掉 socket,让其返回值为 -1   
    FUNC_FAKE_SINGRET_SET(socket, -1);
    // ..Some Code call socket
    // 恢复
    FUNC_FAKE_RESET1(socket);
}

TEST_F(TestXXX, testBind)
{
    // Fake掉 socket,让其返回值为10   
    FUNC_FAKE_SINGRET_SET(socket, 10);
    // Fake掉 bind,让其返回值为-1
    FUNC_FAKE_SINGRET_SET(bind, -1);
    // ..Some Code call socket
    // 恢复
    FUNC_FAKE_RESET2(socket, bind);
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值