gpt4 book ai didi

python - 模拟函数时无法返回元组

转载 作者:太空狗 更新时间:2023-10-29 21:03:06 35 4
gpt4 key购买 nike

我正在尝试熟悉 Python 中的模拟,但在尝试模拟以下函数时却遇到了麻烦。

helpers.py

from path import Path

def sanitize_line_ending(filename):
""" Converts the line endings of the file to the line endings
of the current system.
"""
input_path = Path(filename)

with input_path.in_place() as (reader, writer):
for line in reader:
writer.write(line)

test_helpers.py

@mock.patch('downloader.helpers.Path')
def test_sanitize_line_endings(self, mock_path):
mock_path.in_place.return_value = (1,2)
helpers.sanitize_line_ending('varun.txt')

但是我经常收到以下错误:

ValueError: need more than 0 values to unpack

鉴于我已将返回值设置为元组,我不明白为什么 Python 无法解压它。

然后我将代码更改为 test_sanitize_line_endings存储 input_path.in_place() 的打印返回值我可以看到返回值是 MagicMock目的。具体来说,它会打印类似 <MagicMock name='Path().in_place()' id='13023525345'>如果我理解正确,我想要的是 mock_path是具有返回元组的 in_place 函数的 MagicMock。

我做错了什么,我怎样才能正确替换 input_path.in_place() 的返回值?在 sanitize_line_ending .

最佳答案

经过多次挠头和参加聚会后,我终于遇到了这个 blog post终于解决了我的问题。

问题的症结在于我没有模拟正确的值。因为我想替换函数调用的结果,所以我需要编写的代码是:

@mock.patch('downloader.helpers.Path')
def test_sanitize_line_endings(self, mock_path):
mock_path.return_value.in_place.return_value = (1,2)
helpers.sanitize_line_ending('varun.txt')

这正确地导致函数能够解包元组,然后它立即失败,因为就像 @didi2002 提到的,这不是上下文管理器。然而,我专注于让解包工作,在我能够实现之后,用具有适当方法的构造替换了元组。

关于python - 模拟函数时无法返回元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31477825/

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