В образовательных целях я пишу игру на Pacman, похожую на Qt и C ++.Основная часть игры работает корректно, но теперь мне нужно протестировать ее с фреймворком Googletest.Я прочитал о внедрении зависимостей и попытался внедрить его в свой проект.
Проект состоит из нескольких классов, таких как ghost, pacman и т. Д., И класса "Game", который является QGraphicsView и также содержит указатели на этот объект.Проблема в том, что когда я создаю класс «Game» и передаю poiter объекту mock_pacman, он не использует его mocked-методы и, похоже, не обнаруживает использование mock_pacman (когда я пытаюсь выполнить EXPECT_CALL (..), тест не пройден),В качестве примера я просто опубликую часть кода, которая ссылается на простейший метод:
Конструкторы класса "Game":
Game(QWidget * parent=nullptr) {...};
Game(QVector<ghost*> GhostArray, pacman * _player, PacmanBoard * Board, QWidget * parent=nullptr)
Конструктор Secound просто помещает _player в качестве члена
Метод, который я хотел бы проверить:
int Game::getPacmanDirection()
{
return player->getActualDirection();
}
Макет Пакмана:
class mock_pacman: public pacman
{
public:
virtual ~mock_pacman()=default;
MOCK_METHOD1(keyPressEvent,void(QKeyEvent *));
MOCK_METHOD0(getPosition,QPointF());
MOCK_METHOD1(setPosition,void(QPointF()));
MOCK_METHOD0(update,void());
MOCK_METHOD0(getAnimationPhase,void());
MOCK_METHOD1(setAnimationPhase,void(int));
MOCK_METHOD0(animate,void());
MOCK_METHOD0(getActualDirection,int());
MOCK_METHOD0(getLastMove,QPoint());
MOCK_CONST_METHOD0(pos,QPointF());
};
Тест Google:
TEST(GameClassTests, GettingPacmanRealDirection)
{
mock_pacman * m_pacman = new mock_pacman();
mock_pacmanboard m_board;
mock_ghost ghost0(0);
mock_ghost ghost1(1);
mock_ghost ghost2(2);
mock_ghost ghost3(3);
QVector<ghost*> m_ghost_vector{&ghost0,&ghost1,&ghost2,&ghost3};
EXPECT_CALL(*m_pacman,getActualDirection());
Game * game = new Game(m_ghost_vector,m_pacman,&m_board);
game->getPacmanDirection();
delete m_pacman;
};
Результат теста:
[ RUN ] GameClassTests.GettingPacmanRealDirection
../PacmanTests/tst_alltests.h:110: Failure
Actual function call count doesn't match EXPECT_CALL(*m_pacman, getActualDirection())...
Expected: to be called once
Actual: never called - unsatisfied and active
[ FAILED ] GameClassTests.GettingPacmanRealDirection (4 ms)
Функция getActualDirection () в оригинальном классе pacman помечена как виртуальная.Я пытался сделать это другими методами, использовать тестовое приспособление, передать ссылку и многие другие варианты.
Где я ошибаюсь?