考虑模拟返回文件对象的打开调用
>>> from unittest.mock import MagicMock
>>> mock_fi = MagicMock()
>>> mock_op = MagicMock()
>>> mock_op.return_value = mock_file
>>>
>>> f = mock_op()
>>> f is mock_fi
True
到目前为止还不错。模拟调用的内容是
>>> mock_fi.mock_calls
[]
>>> mock_op.mock_calls
[call()]
这也很好。现在考虑在文件中的行上循环
>>> for l in mock_fi:
... break
...
>>> mock_fi.mock_calls
[call.__iter__()]
这是意料之中的。我不明白的是为什么mock\u op对象也记录了一个__iter__
调用
>>> mock_op.mock_calls
[call(), call().__iter__()]
根据文档,mock_calls记录对对象的所有调用,以及对该对象的调用返回的对象
例如:
在原始代码中,
mock_op.mock_calls
报告call().__iter__()
,这是对mock_fi
上__iter__()
的调用相关问题 更多 >
编程相关推荐