繁体   English   中英

在python的unittest中,如何模拟其中包含伪造图像的伪造文件夹?

[英]In python's unittest, how do I mock a fake folder with fake images inside?

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

这是该函数的简化版本:

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读取它们。

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

编辑:明确地说,我不想创建临时文件夹或临时图像文件。 我想知道是否有一种方法告诉程序:“ 这里有一个文件夹,并且在其中有一些具有这种形状的图像/数组 ”,但是实际上不必在内存中创建任何东西。

如果您确实需要临时文件,则应检查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

如何模拟其中包含伪造图像的伪造文件夹?

def local_cv2_imread():
    # use as a side effect

    return 'fakeImg1'

def test_read_images(self):
    with mock.patch('os.listdir') as mock_listdir:
        with mock.patch('package.module.cv2.imread') as mock_imread:
            mock_listdir.return_value = ['fake_path']
            mock_imread.side_effect = local_cv2_imread
            images = read_images('a_real_path')
            self.assertEqual(images, ['fakeImg1']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM