googletest C++: издевательство над конструктором класса

Хорошо, у меня есть базовый класс и MockBase. Код прилагается ниже. Мне удалось найти решение, но я не уверен, что оно оптимальное.

class Base
{
  public :
    Base ( const int v ) ;
    bool check( const int );
    virtual bool getValue() { return _value ) ;
  private :
    bool _value;
}

реализация здесь

Base::Base( const int v)
{
  _value = check( v ) ; // where check calls some legacy stuff and returns a bool
}

Поэтому, в идеале, я бы хотел, чтобы мой MockBase переопределил эту функцию проверки, которая вызывается при создании. Делать что-то подобное мне не помогло.

class MockBase : public Base
    {
      public :
        MockBase ( const int v ) ;
        MOCK_METHOD1( check, bool( const int ) ) ;
    }
 // TEST

MockBase base( 5 ) ;
EXPECT_CALL( base, checkLevel( 5 ) )
     .WillRepeatedly(Return( true ) ) ;
/// then testing getValue returns false

Это почему? Мое текущее решение - на PS, но в идеале я хотел бы знать, является ли приведенный выше подход верным или нет (и код терпит неудачу из-за моей ошибки, а не потому, что это вообще невозможно).

Мое объяснение таково, я думаю, что при звонке MockBase base( 5 ) ; вместо этого объект MockBase вызывает устаревшую проверку, потому что вызывается конструктор Base.

PS:

Чтобы решить это, я должен был предоставить protected Base() constructor в моем базовом классе, который был использован MockBase и положил мой ожидаемый вызов на getValue(), Я могу дать код, но вопрос в основном выше - может ли он работать так.

0 ответов

Другие вопросы по тегам