Hippomocks есть макрос 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__)
Это работает. Вы должны убедить компилятор с помощью 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);
}
Недостатком этого решения является то, что вы должны знать во время компиляции, сколько аргументов будет вызвано во время выполнения.
Других решений пока нет …