Как создать фиктивный класс с оператором []? - PullRequest
15 голосов
/ 27 июня 2011

У меня класс с operator[], вот так:

class Base
{
  public:
    virtual ~Base(){}
    virtual const int & operator[]( const unsigned int index ) const = 0;
};

Как я могу создать фиктивный класс, используя Google Mock Framework для этого метода?

Я пробовал это:

class MockBase : public Base
{
public:
  MOCK_CONST_METHOD1( operator[],
                      const int& ( const unsigned int )
                      );
};

но это приводит к следующим ошибкам:

error: pasting "]" and "_" does not give a valid preprocessing token
error: pasting "]" and "_" does not give a valid preprocessing token
error: pasting "]" and "_" does not give a valid preprocessing token
error: pasting "]" and "_" does not give a valid preprocessing token

1 Ответ

19 голосов
/ 27 июня 2011

Макросы MOCK_METHOD# не будут работать на операторах.Решение, данное в в этом сообщении , говорит о создании обычного метода для насмешек:

class Base {
 public:
 virtual ~Base () {}
 virtual bool operator==(const Base &) = 0;
};

class MockBase: public Base {
 public:
 MOCK_METHOD1(Equals, bool(const Base &));
 virtual bool operator==(const Base & rhs) { return Equals(rhs); }
}; 
...