【发布时间】:2018-07-10 10:42:07
【问题描述】:
我目前正在为应用程序编写一些测试,并且我想测试错误处理。
例如,我想在 shutil.copyfile() 抛出异常时检查应用程序的行为。由于此函数的 src 和 dst 是在调用 shutil.copyfile() 的函数内部构建的,因此我无法触发测试失败。
我目前做的是以下。
import shutil as f
def __patch():
def my_func(*args, **kwargs):
raise f.SameFileError
f.copyfile = my_func
现在,我希望无论何时在我的应用程序中调用 copyfile,都会引发 SameFileError 错误。但这目前还没有发生。 shutil 的 copyfile 函数仍在执行中。
另一方面,如果我对具有要在类中修补的函数的库执行相同的操作,则修补会起作用,并且我的自定义函数会替换库中的函数。这适用于修补 zipfile 库中的 extractall() 函数,因为要修补的函数位于类中。
from zipfile import ZipFile, BadZipFile
def __patch():
def my_func(*args, **kwargs):
raise BadZipFile
ZipFile.extractall = my_func
谁能告诉我如何让shutil 的copyfile() 运行它。不幸的是,我不能在这里使用模拟库。
提前致谢
【问题讨论】:
-
您的应用程序是通过其限定名称 (
shutil.copyfile) 使用copyfile还是将其绑定到本地名称(from shutil import copyfile或类似名称)? -
使用限定名
-
请详细说明。您的回答正好相反。
标签: python python-3.x unit-testing mocking