#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));