c++ - QTest 和 void 函数

标签 c++ qt unit-testing testing qt-creator

我第一次在 QtCreator 中进行单元测试,我想知道如何测试没有返回类型的函数。 喜欢:

rgb_process.h:

class RGB_process : Process
{
public:
    RGB_process(cv::Mat& src, cv::Mat& dst, int exp = 0, double c = 1, int r = 0, int g = 0, int b = 0);

    virtual void doProcess() override;

private:
    int exposure_Val;
    double contrast_Val;
    int red_Val;
    int green_Val;
    int blue_Val;
};

rgb_process.cpp:

#include "rgb_process.h"

RGB_process::RGB_process(cv::Mat& src, cv::Mat& dst, int exp, double c, int r, int g, int b)
    : Process (src, dst), exposure_Val(exp), contrast_Val(c), red_Val(r), green_Val(g), blue_Val(b){
}

void RGB_process::doProcess(){

    for(int i = 0; i < src.rows; i++)
        for(int j = 0; j < src.cols; j++)
            for(int k = 0; k < 3; k++){
                if(k == 0)  //_R
                    dst.at<cv::Vec3b>(i,j)[k] = cv::saturate_cast<uchar>((src.at<cv::Vec3b>(i,j)[k] + exposure_Val + red_Val )*(259 * (contrast_Val + 255) / (255 * (259 - contrast_Val))));
                if(k == 1)  //_G
                    dst.at<cv::Vec3b>(i,j)[k] = cv::saturate_cast<uchar>((src.at<cv::Vec3b>(i,j)[k] + exposure_Val + green_Val )*(259 * (contrast_Val + 255) / (255 * (259 - contrast_Val))));
                if(k == 2)  //_B
                    dst.at<cv::Vec3b>(i,j)[k] = cv::saturate_cast<uchar>((src.at<cv::Vec3b>(i,j)[k] + exposure_Val + blue_Val )*(259 * (contrast_Val + 255) / (255 * (259 - contrast_Val))));
            }
}

我在网上找不到任何与我的需求类似的示例。

最佳答案

在对函数进行单元测试时,您不仅应该验证其返回值是否符合您的预期,还必须验证您在函数内使用的对象是否以可预测的方式进行操作(如果可能)。如果您正在测试 const 方法,只需验证返回值就足够了。

例如,您正在处理 dst 矩阵,因此您可以验证它是否按照您的预期进行操作,因为您正在对其应用非常清晰的过程。

cv::Mat mySrc;
cv::Mat myDst;

// Here insert some data in mySrc matrix

RGB_process(mySrc, myDst);

// Here verify myDst matrix is still untouched

RGB_process.doProcess();

// Here verify myDst matrix contains processed data from mySrc matrix

您可以执行此操作,因为您的 RGB_process 构造函数获取 cv::Mat& 并且不会复制整个矩阵。

关于c++ - QTest 和 void 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57004156/

相关文章:

c++ - SSE 类型的容器

c++ - 如何从指向基类的唯一指针获取子类成员?

c++ - 在 Rcpp 中控制编译顺序

qt - 在 QSettings 的 ini 文件中具有分层组

unit-testing - grails单元测试中trait提供的覆盖方法

c# - 为 gRPC 客户端创建接口(interface)以进行单元测试

java - 我如何模拟提供使用 JMockit 模拟的类的实例的静态方法?

c++ - 模板化基类还有一个共同的基类指针?

c++ - 如何在调整窗口大小时调整 QListWidget 中项目的大小?

c++ - Qt C++ - 如何将数据从工作线程传递到主线程?