Как смоделировать камеру OpenCV с помощью GMock, или как метод тестирования, который использует камеру с GTest? - PullRequest
0 голосов
/ 15 февраля 2019

Я написал оболочку для библиотеки OpenCV.Я создаю Camera класс, который позволяет использовать аппаратную камеру.

Этот метод проверен следующим образом:

bool Camera::Open(int idx) {
  cam_ = cv::VideoCapture(idx)
  if (cam_.isOpened())
    return true;

  return false;
}

Я хочу протестировать метод Open() с помощью GTest, но я нене хочу проверять это на реальной физической камере.Я думаю, что лучше всего использовать GMock, но я действительно не знаю, как издеваться над камерой.

1 Ответ

0 голосов
/ 15 февраля 2019

Один из вариантов - создать интерфейс для камеры и заводской функции:

class ICam {
    virtual bool isOpened() const = 0;
};

class ICamFactory {
    virtual std::unique_ptr<ICam> VideoCapture(int idx) = 0;
};

Затем ваш класс камеры создается с помощью CamFactory, которая реализует ICamFactory.В своем тесте вы можете создать MockCamFactory, который возвращает MockCam.Затем вы можете установить ожидания для MockCamFactory и MockCam:

EXPECT_CALL(mockCamFactory, VideoCapture(idx))
  .WillOnce(ReturnNew<MockCam>());
EXPECT_CALL(mockCam, isOpened())
  .WillOnce(Return(true));

ASSERT_TRUE(camera.IsOpen(idx)); 

Ваш реальный класс Cam затем упаковывает вызовы в OpenCV.

...