【问题标题】:How to mock OpenCV camera using GMock, or how test method that use camera with GTest?如何使用 GMock 模拟 OpenCV 相机,或者如何使用带有 GTest 的相机测试方法?
【发布时间】:2019-02-15 10:23:00
【问题描述】:

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

测试的方法是这样的:

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

  return false;
}

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

【问题讨论】:

    标签: c++ opencv camera googletest gmock


    【解决方案1】:

    一种选择是为相机创建一个接口和一个工厂函数:

    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 的调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 2016-03-05
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多