gpt4 book ai didi

c++ - Hippomocks - 具有可变参数计数的模拟函数

转载 作者:行者123 更新时间:2023-11-30 05:28:35 24 4
gpt4 key购买 nike

Hippomocks具有用于模拟重载函数调用的 OnCallFuncOverload 宏。我正在尝试使用具有可变 args 计数的模拟函数。任何人都可以给出一个带有可变参数计数的重载函数的例子吗?

我的代码

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);

}

此解决方案的缺点是,您必须在编译时知道在运行时将调用多少参数。

关于c++ - Hippomocks - 具有可变参数计数的模拟函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36749410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com