いくつかの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条件を追加することでしたが、それはガイドラインに違反していました。 基本的にはコールの傍受であるため、私はそれが最良の(または動作する)ソリューションであるかどうかわかりません。私はそれを解決するために何が使えますか?
関数をテストする場合は、それを "模擬する"ことはできません。 –
はい、私はテストしようとしている関数によって呼び出されている関数のうちの1つからの応答を模擬したいと思います。 – Oreols
その関数はどこに定義されていますか?その機能を実装しているライブラリを "モック"ライブラリに置き換えることはできますか? –