我正在使用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
}。
答案 0 :(得分:4)
您需要模拟io.StringIO
,然后您可以将其替换为其他内容:
@mock.patch('mymodule.io.StringIO')
def test_foo(self, mock_stringio):
mock_stringio.return_value = mock.Mock()
请注意使用return_value
,这意味着您正在模拟从StringIO()
调用返回的实例。