gpt4 book ai didi

python MagicMock 返回值不返回元组?

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:56 30 4
gpt4 key购买 nike

我运行了一个快速测试,看看是否有什么工作......

>>> from unittest.mock import MagicMock
>>> x = MagicMock()
>>> x.func.return_value = (0, 0)
>>> y, z = x.func()

似乎像我预期的那样工作,然后我尝试像这样在我的测试中修补一些东西......

def setUp(self):
"""Setting up the command parameters"""
self.command = up.Command()
self.command.stdout = MagicMock()
self.command.directory = '{}/../'.format(settings.BASE_DIR)
self.command.filename = 'test_csv.csv'

@patch('module.Popen')
@patch('module.popen')
def test_download(self, m_popen, m_Popen):
"""Testing that download calls process.communicate"""
m_Popen.communicate.return_value = (0, 0)
self.command.download()
m_popen.assert_called()
m_Popen.communicate.assert_called()

在 command.download 中,代码如下所示...

command = 'wget --directory-prefix=%s \
https://www.phoenix.gov/OpenDataFiles/Crime%%20Stats.csv' \
% self.directory
process = Popen(command.split(), stdin=PIPE, stdout=PIPE)
print(process.communicate())
stdout, stderr = process.communicate()

我的第一个猜测是我修补了错误的命名空间,但是当我打印 communicate() 时,我看到了这个...

<MagicMock name='mock().communicate()' id='4438712160'>

这意味着它正在被 mock ,但它只是没有注册我的新通信返回值......我不知道从这里去哪里。

最佳答案

您在process 上调用communicate,它是Popen 的返回值。所以你需要在那个补丁调用中的另一个级别:

m_Popen.return_value.communicate.return_value = (0, 0)

关于python MagicMock 返回值不返回元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41585833/

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