В юнит-тесте Python, как мне подделать поддельную папку с поддельными изображениями внутри? - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь создать модульный тест для функции, которая считывает каждое изображение из папки и сохраняет его в списке.

Вот упрощенная версия функции:

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.

Моя идея не в том, чтобы создавать временную папку, и, конечно же, в том, чтобы не связываться с какой-либо внешней папкой или базой данных.Возможно ли это?

Редактировать: чтобы было ясно, я не хотел бы создавать временные папки или временные файлы изображений.Я хотел бы знать, есть ли способ сообщить программе: « Здесь есть папка, и внутри нее есть несколько изображений / массивов с этой формой », но на самом деле не нужно создаватьчто-нибудь в памяти.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

как мне подделать поддельную папку с поддельными изображениями внутри?

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']
0 голосов
/ 21 сентября 2018

Если вам действительно нужны временные файлы, вы должны проверить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...