我正在編寫一個單元測試來檢查一些API調用。我正在使用檢查來測試。我的模塊是用CMake(idk,如果重要的話)構建的。功能嘲諷在C?
我的測試調用一個函數(我需要測試),這個函數調用另一個二進制文件。
它的簡化版本看起來像這樣。
/* unitTest.c */
#include "libraryAPI.h"
void letsMakeACall(void)
{
ck_assert_eq(foo("water"), 0);
}
-- Module I am working on---
/*libraryAPI.c*/
#include "legacyLib.h"
void foo(const char *drink)
{
if (checkDrink(drink)!=0)
{
return 1;
}else
{
return 0;
}
}
----LEGACY BINARY---
/*legacyLib.c*/
static const char* expected = "water";
void checkDrink(const char *drink)
{
if(drink == expected)
{
/*There are also a dozen functions being called which depend on legacy module initialisation*/
return 0;
}else{
return 1;
}
}
我想模擬來自legacyLib的響應,因爲否則它會調用幾十個函數和中斷。我最初的想法是在測試運行時添加一些ifdef條件,但這違反了指導原則。 因爲它基本上是一個呼叫攔截,我不知道它是一個最好的(或工作)解決方案。我可以用什麼來解決它?
如果你想測試一個函數,它是沒有意義的「嘲笑」它。 –
是的,但我想嘲笑來自我試圖測試的函數調用的函數之一的響應。 – Oreols
該函數在哪裏定義?你可以使用「模擬」庫來替換實現該功能的庫嗎? –