私は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 を読みましたが、私の質問に関連するものは何も見つかりませんでした。誰かがそれを手伝ってくれますか?
ありがとう!
できません。参照: 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); }
};