我想模拟一个返回复杂数据类型的方法
class aClass
{
public:
virtual const QMap<QString, QString> aMethod() const;
}
class MockaClass : public aClass
{
public:
MOCK_CONST_METHOD0(aMethod, const QMap<QString, QString>());
}
此代码无法编译:“宏”MOCK_CONST_METHOD0“传递3个参数,但只需2”
我认为googlemock宏不理解QMap并将逗号解释为参数分隔符。
有没有办法告诉googlemock QMap是返回值?
答案 0 :(得分:17)
只需使用这样的typedef
:
class aClass
{
public:
typedef const QMap<QString, QString> MyType;
virtual MyType aMethod() const;
}
class MockaClass : public aClass
{
public:
MOCK_CONST_METHOD0(aMethod, MyType());
}
答案 1 :(得分:4)
你是对的,逗号被解释为参数分隔符。您可以定义预处理器宏以保护逗号不被解释。
#define COMMA ,
MOCK_CONSTANT_METHOD0(aMethod, const QMap<QString COMMA QString>());
请注意,这不一定适用于嵌套的宏调用。例如,如果MOCK_CONSTANT_METHOD0
将第二个参数传递给另一个宏,则会再次遇到麻烦。