1

ヒッポモックには、オーバーロードされた関数呼び出しをモックするための OnCallFuncOverload マクロがあります。引数の変数カウントを使用して関数をモックするために使用しようとしています。引数の変数カウントを持つオーバーロードされた関数の例を誰か教えてください。

私のコード

void Verbose(LPCTSTR pszFormat, ...); 
void Verbose(int level, LPCTSTR pszFormat, ...);
vlevel Verbose(vlevel level, LPCTSTR pszFormat, ...);

私はこのコードを試しています

TEST_F(VerboseTests, test)
{
    MockRepository mocks;
    mocks.OnCallFuncOverload((void(*)(int,LPCTSTR,...))Verbose);
}

コンパイラ出力:

hippomocks/hippomocks.h:3241:103: error: invalid conversion from ‘void (*)(int, LPCTSTR, ...) {aka void (*)(int, const char*, ...)}’ to ‘void (*)(int, const char*)’ [-fpermissive]
 #define OnCallFuncOverload(func) RegisterExpect_<__LINE__>(func, HM_NS Any, #func,  __FILE__, __LINE__)
4

1 に答える 1

1

それは機能します。typedef でコンパイラを説得する必要があります。

int Verbose(int level, ...)
{
    return level;
}

typedef int (*va_func)(int level, const char* p1, int p2);

TEST(check_VA_func)
{
    MockRepository mocks;

    mocks.ExpectCallFuncOverload((va_func)Verbose).Return(22);

    int result = Verbose(3,"Hi",9);

    CHECK(result == 22);

}

このソリューションの欠点は、実行時に呼び出される引数の数をコンパイル時に知る必要があることです。

于 2016-08-04T14:04:45.940 に答える