【UT】UnitTest Fake

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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章