python unittest故障模块

时间:2013-10-06 08:29:06

标签: python unit-testing testing

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

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

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

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

readConfiguration()

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

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

我没有写模块,不能重新计算。

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

1 个答案:

答案 0 :(得分:1)

正如评论者已经指出的那样,进口不应该有副作用,所以尽量让模块改变。

如果你真的,绝对不能这样做,可能还有另一种方法:让readConfiguration()被调用,但是它会依赖它。例如,如果它使用内置open()函数,您可以模拟它,如mock 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()的实现,但如果没有其他方法,它可能是最后的手段。