我正在编写一个单元测试来检查一些API调用。我使用check进行测试。我的模块是使用CMake构建的(我不知道这是否重要)。
我的测试调用一个需要测试的函数,而这个函数又调用另一个二进制文件。
以下是它的简化版本。
/* 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条件,但这违反了指南。因为这基本上是一个调用拦截,我不知道什么是最好(或有效的)解决方案。我该使用什么来解决它?