首页 > 解决方案 > 在 python 的单元测试中,我如何模拟一个里面有假图片的假文件夹?

问题描述

我正在尝试为从文件夹中读取每个图像并将它们保存在列表中的函数创建一个单元测试。

这是该函数的简化版本:

def read_images(directory):

    image_paths = os.listdir(directory)

    images = []
    for im in image_paths:
        images.append(cv2.imread(os.path.join(directory, im)))

    return images

这个另一个问题使我接近解决方案,但在我的情况下,我希望创建的假文件是图像(基本上是数组),所以我可以用cv2.imread.

我的想法是不必创建任何临时文件夹,当然也不必连接任何外部文件夹或数据库。这可能吗?

编辑:要清楚,我不想创建临时文件夹,也不需要创建临时图像文件。我想知道是否有办法告诉程序:“这里有一个文件夹,里面有一些具有这种形状的图像/数组”,但实际上不必在内存中创建任何东西。

标签: pythonimageunit-testingopencvmocking

解决方案


如果您确实需要临时文件,则应检查tempfile

它允许您创建提供自动清理的临时文件和目录,因此如果您在有机会测试所需内容的同时使用它,则没有垃圾文件。

编辑

如果您真的不想使用临时文件或临时文件夹,这里是关于您的问题的另一种解决方案:

为您的测试生成内存映像。

from io import BytesIO
from PIL import Image

def create_in_memory_image():
    in_memory_file = BytesIO()
    image = Image.new('RGBA',
                      size=(0, 0),
                      color=(155, 0, 0))
    image.save(in_memory_file,
               'png')
    in_memory_file.name = 'tmp_testing_name.png'
    in_memory_file.seek(0)
    return in_memory_file

推荐阅读