@7a-666

Как замокать функцию в конкретном месте?

Суть проблемы вот в чем
У меня есть тест который должен проверять правильность работы функции которая создает путь для файла
Код теста и код функции
@mock.patch('uuid.uuid4', return_value='name_file.png')
    def test_path_to_restaurant_image(self, fake_func):
        """
        Checking that the path for the restaurant pictures is formed correctly
        """
        restaurant = RestaurantFactory()
        expected_value = restaurant_image_upload_handler(
            restaurant, self.file_name,
        )
        result = os.path.join(
            'restaurant',
            'images',
            self.file_name,
        )
        self.assertEqual(result, expected_value)

def restaurant_image_upload_handler(instance, filename):
    unique_id = str(uuid.uuid4())
    ext = filename.split('.')[-1]
    return os.path.join(
        'restaurant',
        'images',
        f'{unique_id}.{ext}'.lower(),
    )


Я замокал функцию uuid.uuid4() чтобы точно проверить имя файла
Но для создания тестовых обектов я использую фабрику (restaurant = RestaurantFactory()) и она где-то у себя использует функцию uuid.uuid4()
И там же падает потому что я её замокал

Вопрос как замокать функцию uuid.uuid4() только для моей функции (unique_id = str(uuid.uuid4())) или альтернатива
  • Вопрос задан
  • 524 просмотра
Решения вопроса 1
В функции restaurant_image_upload_handler можно использовать функцию для получения unique_id
def  get_unique_id():
    return str(uuid.uuid4())
...
unique_id = get_unique_id()

Тогда можно замокать get_unique_id, а не библиотечную uuid.uuid4()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы