【问题标题】:Patch library functions for testing用于测试的补丁库函数
【发布时间】: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


【解决方案1】:

我找到了解决办法。

导入过程如下:

import shutil as copy

而不是

from shutil import copyfile

然后函数应该被称为copy.copyfile()

【讨论】:

  • 为什么要将shutil绑定到不同的名称?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 2022-10-17
  • 2017-07-10
  • 2020-03-20
相关资源
最近更新 更多