2012-04-18 2 views
7

Я хочу издеваться метод, который возвращает сложный datatypgooglemock - издеваться метод, который возвращает сложный datatyp

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 является возвращаемым значением?

ответ

15

Просто используйте typedef так:

class aClass 
{ 
public: 
    typedef const QMap<QString, QString> MyType; 
    virtual MyType aMethod() const; 
} 

class MockaClass : public aClass 
{ 
public: 
    MOCK_CONST_METHOD0(aMethod, MyType()); 
} 
+0

Errrrm, не должно быть 'MOCK_CONST_METHOD1', так как он принимает один параметр? (хорошее решение, хотя) – Mawg

+1

@Mawg: 'aMethod' имеет нулевые параметры, поэтому' MOCK_CONST_METHOD0' должен быть правильным. – nabulke

+0

Aaargh !! Я неправильно читаю ... как смущающе. Спасибо что подметил это – Mawg

3

Вы правы, запятая интерпретируется как разделитель параметров. Вы можете определить макрос препроцессора, чтобы защитить запятую от интерпретации таким образом.

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

Обратите внимание, что это не обязательно будет работать для вложенных вызовов макросов. Например, если MOCK_CONSTANT_METHOD0 передаст второй параметр другому макросу, у вас снова возникнут проблемы.

+1

Почему Внося это 'define' избежать ошибки компилятора? Полученный код (после предварительной обработки) такой же, как в вопросе. Не могли бы вы объяснить, почему это работает? –

+0

@RonaldMcBean Я не знаю, почему это работает, но кажется, что препроцессор сначала извлекает параметры, а затем расширяет макросы в них. –

+2

[см. Этот ответ для объяснения, почему он работает] (http://stackoverflow.com/a/10208278/913577) –

Смежные вопросы