我为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;
};
然后使用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中。