Я работаю с 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: Я довольно долго искал решение и ничего не нашел. Вот почему я спрашиваю вас, ребята, я в отчаянии, надеюсь, вы можете мне помочь :(
Если я правильно понимаю ваш вопрос, вам просто нужно передать экземпляр NMEADataControler_Mock в Invoke, например:
ON_CALL(*NMEADummy, start())
.WillByDefault(Invoke( NMEADummy.get(), &NMEADataControler_Mock::redirectToStartOfBaseClass));
Здесь NMEADummy.get () возвращает голый указатель на ваш манекен.
В стороне: я не знаю вашего варианта использования, поэтому, возможно, shared_ptr
- хороший вариант для вашего конкретного случая, но это не похоже на это. Советую использовать shared_ptr
только в тех случаях, когда вам нужно несколько владельцев одного ресурса. Если прибор будет единственным владельцем вашего макета, я советую вам использовать unique_ptr
. shared_ptr
более сложны в рассуждении, они могут вводить трудно отслеживаемые циклы подсчета ссылок (они не собираются сборщиком мусора, не выполняется метка и очистка) и являются более тяжелыми из-за дополнительной памяти, выделенной для блока управления. Они также работают медленнее из-за атомарных операций, используемых для управления их счетчиками ссылок.
Большое спасибо, дивины, это мне очень помогло! Теперь я наконец могу продолжить разработку.