python unittest故障modu

2024-05-16 05:43:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用python测试一个模块。你知道吗

我正在使用unittest框架,但遇到了一个问题。你知道吗

模块有一些方法定义,其中一个方法定义在导入(readConfiguration)时使用,如下所示:

.
.
.
def readConfiguration(file = "default.xml"):
    # do some reading from xml

readConfiguration()

这是一个问题,因为当我尝试导入模块时,它也尝试运行“readConfiguration”方法,该方法使模块和程序失败(测试环境中不存在配置文件)。你知道吗

我想能够独立于任何配置文件测试模块。你知道吗

我没有编写模块,无法重新分解。你知道吗

我知道我可以包括一个虚拟配置文件,但我正在寻找一个“更干净”,更优雅,解决方案。你知道吗


Tags: 模块方法from框架default定义def配置文件
1条回答
网友
1楼 · 发布于 2024-05-16 05:43:21

正如评论人士已经指出的那样,导入永远不会有副作用,所以如果可能的话,尝试更改模块。你知道吗

如果您确实绝对不能这样做,那么可能还有另一种方法:让readConfiguration()被调用,但是去掉它的依赖项。例如,如果它使用内置的open()函数,您可以模拟它,如^{} documentation中所示:

>>> mock = MagicMock(return_value=sentinel.file_handle)
>>> with patch('builtins.open', mock):
...     import the_broken_module
...     # do your testing here

如果需要提供实际内容,请将sentinel.file_handle替换为StringIO("<contents of mock config file>")。你知道吗

它是脆弱的,因为它依赖于readConfiguration()的实现,但是如果真的没有其他方法,它可能是最后的手段。你知道吗

相关问题 更多 >