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 を理解せず、コンマをパラメーター区切りとして解釈すると思います。

QMapが戻り値であることをgooglemockに伝える方法はありますか?

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、2 番目のパラメーターを別のマクロに渡すと、再び問題が発生します。

于 2012-04-18T10:28:53.990 に答える