Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#单元测试中涵盖图像转换?_C#_.net_Unit Testing - Fatal编程技术网

如何在C#单元测试中涵盖图像转换?

如何在C#单元测试中涵盖图像转换?,c#,.net,unit-testing,C#,.net,Unit Testing,我们编写了一个库,可以生成各种文件格式的缩略图。我喜欢对这个库进行单元测试。它生成JPEG文件 如何对图像转换进行单元测试?当JPG使用有损格式时,如何检查两幅图像是否相似 有一个类,但我不确定它是否适合我的个人资料。有什么想法吗?首先,单元测试不会公开实际的实现。你使用模拟。目标应该是验证是否调用了方法,并且给定的模拟实现返回了预期的结果 通常,人们将单元测试与集成测试混合在一起,并且通常在责任方面存在问题。您所描述的似乎是一个集成测试 一种方法是创建ImageDifference函数以获得

我们编写了一个库,可以生成各种文件格式的缩略图。我喜欢对这个库进行单元测试。它生成JPEG文件

如何对图像转换进行单元测试?当JPG使用有损格式时,如何检查两幅图像是否相似


有一个类,但我不确定它是否适合我的个人资料。有什么想法吗?

首先,单元测试不会公开实际的实现。你使用模拟。目标应该是验证是否调用了方法,并且给定的模拟实现返回了预期的结果


通常,人们将单元测试与集成测试混合在一起,并且通常在责任方面存在问题。您所描述的似乎是一个集成测试

一种方法是创建ImageDifference函数以获得平均差:

图像取自Wolfram Mathematica文档。如果有正确的工具和预先了解,这是一个非常容易的问题(但通常不是)

在有损图像的情况下,你会得到一些看起来像阴影图像的东西。但是,您不需要计算图像,只需要一个描述差异的双精度值。要测试它,请执行以下操作:

Assert.That(expected, Is.EqualTo(actual).Within(tolerance));
假设您的预期值为0.03,实际值为0.01638489638,公差为0.005。这将测试图像是否包含质量为97%的图像,错误率为0.5%


我希望您觉得这很有帮助。

相像还是平等?我想这是一个正确的问题。不能相等,因为大小不合适。与其比较文件格式,不如将图像加载到图像缓冲区中,这样不管是否为JPEG。然后问题就变成了如何测试两个光栅缓冲区的相似性。e、 g.增加RGB直方图的公差;边缘检测;高通和低通滤波器。具有图像比较功能您可以使用一些外部应用程序,如
imagemagic
,从命令行生成缩略图JPEG。然后使用相同的命令行将两个图像转换为BMP,然后逐像素比较+允许(R、G、B)值之间存在一定的变化,例如所比较的每个像素的+/-(5,10,5)。但是,如果我是你,我只会手动检查一些图像,而不只是假设它工作,或者更好,我会告诉你,其他人的库可以在比较之前将缩略图转换为纯未压缩的.bmp。也许这会有帮助