San*_*nda 6 python file-io mocking with-statement
阅读本文后:如何模拟with语句中使用的open(使用Python中的Mock框架)?
我可以使用以下方法在python中模拟open函数:
with patch(open_name, create=True) as mock_open:
mock_open.return_value = MagicMock(spec=file)
m_file = mock_open.return_value.__enter__.return_value
m_file.read.return_value = 'text1'
diffman = Diffman()
diffman.diff(path1, path2)
Run Code Online (Sandbox Code Playgroud)
当我的测试方法使用一个开放语句时,它运行良好.这是我测试的方法:
def diff(self, a, b):
with open(a, 'r') as old:
with open(b, 'r') as new:
oldtext = old.read()
newtext = new.read()
Run Code Online (Sandbox Code Playgroud)
oldtext和newtext的值相同(此处为'text1').
我想为oldtext设置'text1',为newtext设置'text2'.
我怎样才能做到这一点 ?
这是获得所需内容的快捷方式.它有点欺骗,因为被测方法中的两个文件对象是同一个对象,我们只是在每次读取后更改读取调用的返回值.如果您希望文件对象不同,您可以在多个层中使用相同的技术,但它会非常混乱,并且可能会不必要地掩盖测试的意图.
替换此行:
m_file.read.return_value = 'text1'
有:
reads = ['text1', 'text2']
m_file.read.side_effect = lambda: reads.pop(0)
| 归档时间: |
|
| 查看次数: |
3589 次 |
| 最近记录: |