【发布时间】:2019-06-26 08:16:32
【问题描述】:
您可能还记得我或运行一种“Lightroom”面板,使用 C++ 和 Qt 作为 GUI。 今天我正在阅读有关为我的主类实现单元测试的内容,但我的问题是,如何测试一个不返回任何内容的函数?
例如,我得到了那个功能:
void ImgProcessing::processMaster(cv::Mat& img, cv::Mat& tmp, int brightness, int red, int green, int blue, double contrast){
for(int i = 0; i < img.rows; i++)
for(int j = 0; j < img.cols; j++)
for(int k = 0; k < 3; k++){
if(k == 0) //_R
tmp.at<cv::Vec3b>(i,j)[k] = cv::saturate_cast<uchar>((img.at<cv::Vec3b>(i,j)[k] + brightness + red )*(259 * (contrast + 255) / (255 * (259 - contrast))));
if(k == 1) //_G
tmp.at<cv::Vec3b>(i,j)[k] = cv::saturate_cast<uchar>((img.at<cv::Vec3b>(i,j)[k] + brightness + green )*(259 * (contrast + 255) / (255 * (259 - contrast))));
if(k == 2) //_B
tmp.at<cv::Vec3b>(i,j)[k] = cv::saturate_cast<uchar>((img.at<cv::Vec3b>(i,j)[k] + brightness + blue )*(259 * (contrast + 255) / (255 * (259 - contrast))));
}
这个函数只取 obj 'mat img',并修改 'mat tmp' obj。 而不是通过在我的 gui 类中使用另一个专用函数来更新 UI 以显示修改后的图像。
有人遇到过这样的事情吗?
【问题讨论】:
-
这是一个正常的返回函数。它修改了
tmp和img,即这些参数用于存储返回的结果。 -
前置条件和后置条件是什么?这就是您要测试的内容。函数是否返回某些东西是次要的。即使是
void foo();,要么有可以检查的后置条件,要么一开始就无法测试 -
为了比较:
void f() { for(;;) { } }将是一个非返回函数,来自现实世界的示例是exit函数或execve系列的函数(不返回 除非 有一些错误)。
标签: c++ qt unit-testing qt-creator