Google Mock std :: shared_prt Проблемы вызова

Я работаю с google mock, чтобы издеваться над поведением класса. Объект, над которым я издеваюсь, - это std: shared_prt. Почему-то я не могу перенаправить вызов метода (фиктивного метода) на другой метод в классе.

Метод, который я хочу вызвать redirectToStartOfBaseClass (), вызывает start () - метод базового класса (NMEADataControler)

Мок-класс:

class NMEADataControler_Mock : public NMEADataControler{
   ...
   //    The method I want to redirecto to ...
   void redirectToStartOfBaseClass();
   ...
   // ... when this mock method is called
   MOCK_METHOD0(start, void());
   ...
}

Класс с тестовой установкой, которую я использую

class TestFixtureClass : public ::testing::Test{
   ...
   std::shared_ptr<NMEADataControler_Mock> NEMADummy;
   ...
}

Метод испытания:

TEST_F(TestFixtureClass, StupidTest){
   ...
   ON_CALL(*NMEADummy, start())
      .WillByDefault(Invoke( ?????? ) //What parameters to I have to put in here? 
   //To redirect to *NMEADummy->redirectToStartOfBaseClass()

}

У меня нет опыта работы с C++ и я новичок в этом, так что, пожалуйста, простите меня, если мои ошибки очевидны и очень глупы.

Ps: Я довольно долго искал решение и ничего не нашел. Вот почему я спрашиваю вас, ребята, я в отчаянии, надеюсь, вы можете мне помочь :(

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
317
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я правильно понимаю ваш вопрос, вам просто нужно передать экземпляр NMEADataControler_Mock в Invoke, например:

ON_CALL(*NMEADummy, start())
      .WillByDefault(Invoke( NMEADummy.get(), &NMEADataControler_Mock::redirectToStartOfBaseClass));

Здесь NMEADummy.get () возвращает голый указатель на ваш манекен.

В стороне: я не знаю вашего варианта использования, поэтому, возможно, shared_ptr - хороший вариант для вашего конкретного случая, но это не похоже на это. Советую использовать shared_ptr только в тех случаях, когда вам нужно несколько владельцев одного ресурса. Если прибор будет единственным владельцем вашего макета, я советую вам использовать unique_ptr. shared_ptr более сложны в рассуждении, они могут вводить трудно отслеживаемые циклы подсчета ссылок (они не собираются сборщиком мусора, не выполняется метка и очистка) и являются более тяжелыми из-за дополнительной памяти, выделенной для блока управления. Они также работают медленнее из-за атомарных операций, используемых для управления их счетчиками ссылок.

Большое спасибо, дивины, это мне очень помогло! Теперь я наконец могу продолжить разработку.

TheProgrammingBatman 11.10.2018 18:31

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