Python 单元测试故障模块



我有一个模块需要用python测试。

我正在使用单元测试框架,但我遇到了一个问题。

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

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

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

我希望能够独立于任何配置文件测试模块。

我没有

编写模块,也无法重构。

我知道我可以包含一个虚拟配置文件,但我正在寻找一个"更干净"、更优雅的解决方案。

正如评论者已经指出的那样,导入不应该有副作用,所以如果可能的话,尝试更改模块。

如果你真的,绝对,不能这样做,可能还有另一种方法:让readConfiguration()被调用,但存根它的依赖项。例如,如果它使用内置的open()函数,你可以模拟它,如mock文档中所示:

>>> 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()的实现,但如果真的没有其他方法,它可能是有用的最后的手段。

最新更新