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