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()
, Я могу дать код, но вопрос в основном выше - может ли он работать так.