Как установить возвращаемое значение по умолчанию для ON_CALL для метода const для gmock?

#c #googlemock

#c #googlemock

Вопрос:

У меня есть два разных метода:

 MOCK_METHOD(const std::shared_ptr< const A >amp;, func, (), (const));
MOCK_METHOD(const std::shared_ptr< A >amp;, func, ());
 

И я установил действие ON_CALL следующим образом:

 std::shared_ptr< A > value = std::make_shared< A >();
ON_CALL(*ptr, func()).WillByDefault(ReturnRef(value));
 

Если я запускаю тест const , метод вызывается, но gmock утверждает, что действие по умолчанию не установлено.
Если я изменю код на

 std::shared_ptr< const A > value = std::make_shared< const A >();
ON_CALL(*ptr, func()).WillByDefault(ReturnRef(value)); 
 

Это не сработает. Вместо этого я получаю ошибку компиляции C2440 ( 'return': cannot convert from 'T' to 'const std::shared_ptr< A >amp;' )

Комментарии:

1. ON_CALL(Const(*ptr), func()).

Ответ №1:

Комментарий @Piotr Skotnicki был хорошим намеком на поиск правильного блока кода в кулинарной книге:

 using ::testing::ReturnRef;

class MockFoo : public Foo {

  MOCK_METHOD(Baramp;, GetBar, (), (override));
  MOCK_METHOD(const Baramp;, GetBar, (), (const, override));
};


  MockFoo foo;
  Bar bar1, bar2;
  EXPECT_CALL(foo, GetBar())         // The non-const GetBar().
      .WillOnce(ReturnRef(bar1));
  EXPECT_CALL(Const(foo), GetBar())  // The const GetBar().
      .WillOnce(ReturnRef(bar2));