web-dev-qa-db-ja.com

オーバーロードされた演算子にgmockMOCK_METHODを使用するにはどうすればよいですか?

私はgooglemock(およびStackOverflow)を初めて使用します。 googlemockでMOCK_METHODnを使用すると問題が発生し、この関数は広く使用されていると思います。これが私がしたことです。

仮想オーバーロードされたoperator[]を持つ抽象クラスFooがあります。

class Foo{
public:
      virtual ~Foo(){};
      virtual int operator [] (int index) = 0;
}

googlemockを使用してMockFooを取得したい:

class MockFoo: public Foo{
public:
      MOCK_METHOD1(operator[], int(int index));  //The compiler indicates this line is incorrect
}

ただし、このコードでは、次のようなコンパイルエラーが発生します。

error: pasting "]" and "_" does not give a valid preprocessing token
  MOCK_METHOD1(operator[], GeneInterface&(int index));

私の理解では、コンパイラはoperator[]を誤解しており、メソッド名とは見なしていません。しかし、operator[]を使用してMOCK_METHODnをモックする正しい方法は何ですか? googlemockから docs を読みましたが、私の質問に関連するものは何も見つかりませんでした。誰かがそれを手伝ってくれますか?

ありがとう!

9
Ruoxi

できません。参照: https://groups.google.com/forum/#!topic/googlemock/O-5cTVVtswE

解決策は、次のような通常の昔ながらのオーバーロードメソッドを作成することです。

class Foo {
 public:
 virtual ~Foo() {}
 virtual int operator [] (int index) = 0;
};

class MockFoo: public Foo {
 public:
 MOCK_METHOD1(BracketOp, int(int index));
 virtual int operator [] (int index) override { return BracketOp(index); }
}; 
13
ifma