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>
DECLARE_FAKE_VALUE_FUNC3(int, socket, int, int, int);
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
#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);
TEST_F(TestXXX, testSocket)
{
FUNC_FAKE_SINGRET_SET(socket, -1);
FUNC_FAKE_RESET1(socket);
}
TEST_F(TestXXX, testBind)
{
FUNC_FAKE_SINGRET_SET(socket, 10);
FUNC_FAKE_SINGRET_SET(bind, -1);
FUNC_FAKE_RESET2(socket, bind);
}