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

我试图熟悉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:需要多于0个值才能解压缩

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

然后我改变了我的代码,让test_sanitize_line_endings存储input_path.in_place()的打印返回值,我可以看到返回值是一个MagicMock对象.特别是它打印的东西
< MagicMock name ='Path().in_place()'id ='13023525345'>
如果我理解正确,我想要的是将mock_path作为MagicMock,它具有一个返回元组的in_place函数.

我做错了什么,如何在sanitize_line_ending中正确替换input_path.in_place()的返回值.

最佳答案
经过多次努力和参加聚会后,我终于遇到了这个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 – 模拟函数时无法返回元组 - 代码日志