如何使用GMock模拟OpenCV摄像机,或者如何通过GTest使用摄像机的测试方法?

时间:2019-02-15 10:23:01

标签: c++ opencv camera googletest gmock

我已经为OpenCV库编写了一个包装器。我创建了Camera类,该类允许使用硬件摄像头。

经过测试的方法如下:

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

  return false;
}

我想使用GTest测试Open()方法,但是我不想使用真实的物理相机对其进行测试。我认为最好的方法是使用GMock,但我真的不知道如何模拟相机。

1 个答案:

答案 0 :(得分:0)

一个选项是为相机创建一个界面和一个出厂功能:

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

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

然后用实现ICamFactory的CamFactory构造您的相机类。在测试中,您可以创建一个返回MockCam的MockCamFactory。然后,您可以对MockCamFactory和MockCam设置期望值:

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

ASSERT_TRUE(camera.IsOpen(idx)); 

您真正的Cam类然后将调用包装到OpenCV。