gpt4 book ai didi

Python Mock - 模拟几个打开

转载 作者:太空狗 更新时间:2023-10-29 22:27:36 34 4
gpt4 key购买 nike

阅读此文后:How do I mock an open used in a with statement (using the Mock framework in Python)?

我可以使用以下方法在 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)

当我测试的方法使用一个 open 语句时,它运行良好。这是我测试过的方法:

def diff(self, a, b):
with open(a, 'r') as old:
with open(b, 'r') as new:
oldtext = old.read()
newtext = new.read()

oldtext 和 newtext 的值相同(此处为 'text1')。

我希望旧文本使用“text1”,新文本使用“text2”。

我该怎么做?

最佳答案

这是获得所需内容的快速方法。它有点作弊,因为被测方法中的两个文件对象是同一个对象,我们只是在每次读取后更改读取调用的返回值。如果您希望文件对象不同,您可以在多层中使用相同的技术,但这会非常困惑,并且可能会不必要地掩饰测试的意图。

替换这一行:

    m_file.read.return_value = 'text1'

与:

    reads = ['text1', 'text2']    m_file.read.side_effect = lambda: reads.pop(0)

关于Python Mock - 模拟几个打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9349122/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com