如何使用 GMock 模拟 OpenCV 相机,或者如何使用带有 GTest 的相机测试方法?
Posted
技术标签:
【中文标题】如何使用 GMock 模拟 OpenCV 相机,或者如何使用带有 GTest 的相机测试方法?【英文标题】:How to mock OpenCV camera using GMock, or how test method that use camera with 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,但我真的不知道如何模拟相机。
【问题讨论】:
【参考方案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 的调用。
【讨论】:
以上是关于如何使用 GMock 模拟 OpenCV 相机,或者如何使用带有 GTest 的相机测试方法?的主要内容,如果未能解决你的问题,请参考以下文章