单元测试opencv c ++程序,该程序拍摄照片并将其保存到文件中

时间:2018-05-01 08:24:29

标签: c++ unit-testing opencv

我是单元测试的新手,我想知道是否有人可以告诉我下面代码的单元测试可能是什么样的?该代码使用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;
}

1 个答案:

答案 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。如果此单元测试失败,则表示该功能无法保存图片。

当您尝试调试软件时,单元测试至关重要。如果您遇到问题,例如:您运行程序但找不到任何图片。你知道,由于你的单元测试,出了什么问题。

如果任何单元测试失败,您立即知道修复它需要做什么。