测试执行相似但相反操作的两种方法的最佳实践是什么?

问题描述 投票:0回答:1

作为一个业余爱好项目,我正在 .NET / C# 中构建一个应用程序,它接受位图,执行一些操作,并保存修改后的位图。除了修改之外,这还需要将位图转换为数组的方法,反之亦然。例如:

interface IBitmapConverter {

    [,]float BitmapToGrayscale(Bitmap bitmap);
    Bitmap GrayscaleToBitmap([,]float grayscale);
}

现在假设我想为

BitmapToGrayscale
创建一个测试。该测试将执行以下步骤:

  1. 从一些已知数据创建一个非常简单的位图
  2. 调用 SUT 方法(即
    BitmapToGrayscale
    )来创建浮点数组
  3. 验证数组内容是否与已知数据匹配

这里的问题在于步骤1。如何从已知数据(即以浮点数组的形式)构造位图?我可以使用其他 SUT 方法(即

GrayscaleToBitmap
),但这感觉有点不对劲。我可以在测试类中编写一个辅助方法,但这基本上是
GrayscaleToBitmap
的重复。我可以使用从文件中读取的已知位图,但这感觉有点麻烦。

关于如何正确执行此操作有什么建议吗?

c# .net oop testing xunit
1个回答
0
投票

这里的问题在于步骤1。如何从已知数据(即浮点数组的形式)构建位图?

只需创建一个小位图并使用 SetPixel 设置颜色。

您将需要指定如何完成从颜色值到浮点数的映射。白色映射为1吗? 255?绿色怎么样?这一切都需要成为规范的一部分。您还应该指定所有像素格式的行为,并根据需要编写测试。

反面也同样的方法。 Float 的范围比常见的像素格式大得多。因此,您可能需要将 32 位数据压缩为 8 位。您是否使用 0 和 1 之间的线性映射?图像中的最小值和最大值之间?某种类型的非线性映射?

我还会考虑多维数组是否是图像的最佳表示。它以列优先顺序存储值,这与几乎所有图像格式相反。因此,您要么需要接受像

image[y,x]
这样的索引,要么在进行任何转换时转置数据。

© www.soinside.com 2019 - 2024. All rights reserved.