如何使用gmock嘲笑OpenCV摄像机,或者如何将摄像机与GTEST一起使用

How to mock OpenCV camera using GMock, or how test method that use camera with GTest?

本文关键字:摄像机 GTEST 一起 或者 gmock 何使用 嘲笑 OpenCV      更新时间:2023-10-16

我为OpenCV库编写了包装器。我创建Camera类,允许使用硬件相机。

测试方法是这样的:

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

我想使用GTEST测试Open()方法,但我不想用真实的物理相机测试它。我认为最好的方法是使用Gmock,但我真的不知道如何模拟相机。

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

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

您是相机类,然后使用摄像头构建,该摄像头会实现ICAMFACTORY。在您的测试中,您可以创建一个返回小型摄影机的无用摄影。然后,您可以在"无用的摄影"answers" Mockcam"上设置期望:

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

您的真实凸轮类,然后将呼叫拨打到OpenCV。