使用Mock在Python单元测试中模拟函数内部的函数

时间:2013-12-06 08:28:55

标签: python unit-testing mocking

我正在使用Mock进行Python单元测试。我正在测试一个函数foo,它包含一个函数bar,它不返回任何内容,但填充变量x(类型:io.StringIO)作为副作用。我使用MagicMock嘲笑bar,但我不知道如何从测试脚本中分配x

我有以下情况:

def foo():
    x = io.StringIO()
    bar(x)                 # x is filled with some string by bar method
    here some operation on x

要为foo编写一个单元测试用例,我使用MagicMock(返回值=无)模拟了bar,但是x需要如何分配foo }。

1 个答案:

答案 0 :(得分:4)

您需要模拟io.StringIO,然后您可以将其替换为其他内容:

@mock.patch('mymodule.io.StringIO')
def test_foo(self, mock_stringio):
    mock_stringio.return_value = mock.Mock()

请注意使用return_value,这意味着您正在模拟从StringIO()调用返回的实例。