В настоящее время я пишу несколько тестов для приложения, и я хочу проверить обработку ошибок.
Например, я хочу проверить поведение приложения, когда 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. К сожалению, я не могу использовать макетную библиотеку здесь.
заранее спасибо
Я нашел решение.
Импорт должен производиться следующим образом:
import shutil as copy
вместо
from shutil import copyfile
а затем эту функцию следует называть copy.copyfile()
copyfile
через егоcopyfile
имя (shutil.copyfile
) или вы привязываете его к локальному имени (from shutil import copyfile
или аналогичного)?