我是单元测试的新手,我想知道是否有人可以告诉我下面代码的单元测试可能是什么样的?该代码使用opencv库拍摄照片并将其存储到文件中。你会写3个测试用例来检查是否打开相机,拍照并保存到文件是否成功?
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int, char**)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
Mat frame;
cap >> frame; // get a new frame from camera
// do any processing
imwrite("/home/user/cpp_test/image.png", frame);
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
答案 0 :(得分:2)
C ++中的实现细节将取决于您的单元测试框架,但基本上您的单元测试应该放在专用的类上,并且应该很简单。
我将以BOOST为例:
BOOST_AUTO_UNIT_TEST (TestIsCameraOpen)
{
VideoCapture cap(0); // open the default camera
BOOST_CHECK (cap.isOpened() == true);
}
在第一次测试中,您只是测试openCV功能是否能够到达相机。如果无法执行,cap.isOpened()
会将您发回“false”。而你的测试将失败。
然后第二次测试看起来应该是这样的:
BOOST_AUTO_UNIT_TEST (TestTakeAPicture)
{
VideoCapture cap(0); // open the default camera
Mat frame;
cap >> frame; // get a new frame from camera
BOOST_CHECK (frame != Mat());
}
在第二次测试中,您正在测试帧是否与默认值不同。如果此测试失败,则表示您无法拍照。
然后你有最后的测试来知道你是否能够保存图片:
BOOST_AUTO_UNIT_TEST (TestSaveImage)
{
VideoCapture cap(0); // open the default camera
Mat frame;
cap >> frame; // get a new frame from camera
BOOST_CHECK (imwrite("/home/user/cpp_test/image.png", frame) == true);
}
在第3次测试中,我们希望cv::imwrite
在成功时返回true。如果此单元测试失败,则表示该功能无法保存图片。
当您尝试调试软件时,单元测试至关重要。如果您遇到问题,例如:您运行程序但找不到任何图片。你知道,由于你的单元测试,出了什么问题。
如果任何单元测试失败,您立即知道修复它需要做什么。