我已经为OpenCV库编写了一个包装器。我创建了Camera
类,该类允许使用硬件摄像头。
经过测试的方法如下:
bool Camera::Open(int idx) {
cam_ = cv::VideoCapture(idx)
if (cam_.isOpened())
return true;
return false;
}
我想使用GTest测试Open()
方法,但是我不想使用真实的物理相机对其进行测试。我认为最好的方法是使用GMock,但我真的不知道如何模拟相机。
答案 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。