Google Mock で演算子オーバーロードしたクラスのモックを作る。
経緯
以前書いたGoogle Mock を導入してみた。に見るように 普通の仮想メンバ関数のモッキングは大変簡単なのだが、演算子のオーバーロードに対してはモッキングができないのかやり方を調べてみた。
問題
単純に仮想関数をモッキングするだけであれば、MOCK_METHOD*
を書けば良いだけなのだが以下の様なコードは許容されなかった。
どうやら単純にはできないらしい。
class MyList { public: virtual ~MyList(){ } virtual MyElement &operator[](int index) = 0; }; class MockedMyList : public MyList { public: MOCK_METHOD1(operator[], MyElement &(int index)); // こう書くことはできない。 };
解決法
operator[]
はオーバーライドし、モッキングしたメンバ関数に処理を委譲すれば良い。
すなわち以下のように定義する。
class MockedMyList : public MyList { public: MOCK_METHOD1(subscript, MyElement &(int index)); MyElement &operator[](int index) { return subscript(index); } };
あとはsubscript
の動作を定義すれば良い。
参考資料
http://stackoverflow.com/questions/6492664/how-to-create-a-mock-class-with-operator