Google Mock std :: shared_prt вызывает проблемы - PullRequest
0 голосов
/ 11 октября 2018

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

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

Класс Mock:

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

1 Ответ

0 голосов
/ 11 октября 2018

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...