Функции библиотеки патчей для тестирования

1

В настоящее время я пишу несколько тестов для приложения, и я хочу проверить обработку ошибок.

Например, я хочу проверить поведение приложения, когда shutil.copyfile() выдает исключение. Поскольку src и dst для этой функции накапливаются внутри функции, вызывающей shutil.copyfile(), я не могу вызвать сбой из моего теста.

В настоящее время я делаю следующее.

import shutil as f
def __patch():

    def my_func(*args, **kwargs):
        raise f.SameFileError

    f.copyfile = my_func

Теперь я ожидаю, что в моем приложении будет вызываться скопированный файл в любое время, он бы выбросил ошибку SameFileError. Но в настоящее время этого не происходит. Функция copyfile из shutil все еще выполняется.

С другой стороны, если я сделаю то же самое для библиотеки, у которой есть функция для исправления внутри класса, исправление работает, и моя пользовательская функция заменяет эту функцию из библиотеки. Это работает для исправления функции extractall() в библиотеке zipfile, потому что функция, подлежащая исправлению, находится внутри класса.

from zipfile import ZipFile, BadZipFile
def __patch():

    def my_func(*args, **kwargs):
        raise BadZipFile

    ZipFile.extractall = my_func

Может кто-нибудь, пожалуйста, скажите мне, как я могу запустить этот файл для copyfile() из shutil. К сожалению, я не могу использовать макетную библиотеку здесь.

заранее спасибо

  • 0
    Использует ли ваше приложение copyfile через его copyfile имя ( shutil.copyfile ) или вы привязываете его к локальному имени ( from shutil import copyfile или аналогичного)?
  • 0
    Его используя квалифицированное имя
Показать ещё 1 комментарий
Теги:
python-3.x
unit-testing
mocking

1 ответ

0

Я нашел решение.

Импорт должен производиться следующим образом:

import shutil as copy

вместо

from shutil import copyfile

а затем эту функцию следует называть copy.copyfile()

  • 0
    Почему вы связываете шутил с другим именем?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню