gmock一种接受变量参数的方法
GMOCK a method accepting variable arguments
我有一个具有接受变量参数的方法:
class MyClass
{
public:
virtual void myprint(const char* format, ...) = 0;
};
我试图模拟上述类
class Mock : public MyClass
{
public:
MOCK_METHOD1(myprint, void (const char* format, ...));
}
但它给出了我的汇编问题:
error: 'Result' in 'struct testing::internal::Function<void(const char*, ...)>' does not name a type
MOCK_METHOD1(myprint, void (const char* format, ...));
^
error: incomplete type 'testing::internal::Function<void(const char*, ...)>' used in nested name specifier
error: incomplete type 'testing::internal::Function<void(const char*, ...)>' used in nested name specifier
error: template argument 1 is invalid
error: field 'gmock1_print_15' has incomplete type 'testing::internal::FunctionMocker<void(const char*, ...)>'
如何模拟将变量参数作为参数的方法?
不幸的是,您无法直接模拟gmock中的变异功能:
您无法直接模拟variadic函数(即,在Google Mock中直接获取Ellipsis(...)参数)。
问题是,通常,模拟对象无法知道将多少参数传递给variadic方法,以及参数的类型是什么。只有基类的作者才知道该协议,我们不能看他的头。
因此,要模拟此类功能,用户必须教模拟对象如何找出参数及其类型的数量。一种方法是提供函数的超载版本。
省略者参数是从C继承的,而不是真正的C 功能。它们不安全使用,不使用具有构造函数或破坏者的论点。因此,我们建议尽可能避免在C 中避免它们。
但是,尼梅利斯(Nemelis)提出了一些解决方法,您可以用来实现这一目标。它涉及处理您的 format
参数以及任何variadic参数以创建一个message
字符串,然后模拟一个将message
作为单个参数中的函数。
相关文章:
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 带有整数的变量参数列表
- 转发变量参数列表以模拟 std::thread
- 存储稍后要转发的变量参数
- 包括一个类来定义全局变量参数 c++ :(
- 可变参数模板类的构造函数无法接受变量参数
- 变量参数列表 后面的'const std::string&'弄乱了堆栈
- 变量参数崩溃的 C 函数
- 如何使用变量参数化类型?C++
- 使用参数包分配具有变量参数的函数指针
- 参考变量参数与本地参考变量
- 如何以相同的方法在子类中超载的相同方法来实现工作变量参数方法
- 如何基于模板变量参数多次扩展语句
- gmock一种接受变量参数的方法
- 使用变量参数列表与向量(C )的原因
- lambda 中的变量参数作为函数指针
- C 变量参数错误
- 带有变量参数列表的c++11 lambda函数
- 变量参数
- std::函数带有C变量参数,而不是模板变量参数