如何使用GMock模拟OpenCV相机,或者如何使用GTest相机的测试方法?

问题描述 投票:1回答:1

我为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个回答
0
投票

一种选择是为相机和工厂功能创建一个界面:

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

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

然后使用CamFactory构建相机类,该CamFactory实现ICamFactory。在您的测试中,您可以创建一个返回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中。

© www.soinside.com 2019 - 2024. All rights reserved.