Ich schreibe einen Komponententest, um einige API-Aufrufe zu überprüfen. Ich verwende einen Scheck, um zu testen. Mein Modul ist mit CMake gebaut (idk wenn es darauf ankommt).Function Mocking in C?
Mein Test ruft eine Funktion auf (die ich testen muss) und diese Funktion ruft einen anderen Binärcode auf.
Die vereinfachte Version sieht so aus.
/* 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;
}
}
Ich möchte Antwort von LegacyLib verspotten, weil sonst Dutzende von Funktionen und Pausen aufrufen. Meine anfängliche Idee war, einige ifdef-Bedingungen hinzuzufügen, wenn Tests ausgeführt werden, aber es ist gegen Richtlinien. Weil es im Grunde eine Anrufüberwachung ist, weiß ich nicht, was es eine beste (oder funktionierende) Lösung ist. Was kann ich verwenden, um es zu lösen?
Wenn Sie eine Funktion testen möchten, ist es nicht sinnvoll, „mock“ es. –
Ja, aber ich möchte eine Antwort von einer der Funktionen, die von der Funktion, die ich testen möchte, aufgerufen werden. – Oreols
Wo ist diese Funktion definiert? Können Sie die Bibliothek, die diese Funktion implementiert, durch eine "Schein" -Bibliothek ersetzen? –