7

我想模拟一个返回复杂数据类型的方法

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 是返回值?

4

3 回答 3

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());
}
于 2012-04-18T10:37:24.973 回答
4

你是对的,逗号被解释为参数分隔符。您可以定义一个预处理器宏来保护逗号不被这种方式解释。

#define COMMA ,
MOCK_CONSTANT_METHOD0(aMethod, const QMap<QString COMMA QString>());

请注意,这不一定适用于嵌套宏调用。例如,如果MOCK_CONSTANT_METHOD0将第二个参数传递给另一个宏,您将再次遇到麻烦。

于 2012-04-18T10:28:53.990 回答
1

()用于复杂的参数,

class MockaClass : public aClass
{
public:
   MOCK_METHOD((const QMap<QString, QString>), aMethod, (), (const));
}
于 2022-02-22T07:07:06.190 回答