如何在Easymock中模拟多个返回值

时间:2016-12-22 06:00:42

标签: python python-3.x unit-testing magicmock

我是一个python新手,我正在尝试模拟process.communicate方法,但我不知道如何从mock返回多个值。我接近它的方式是

with patch.object(subprocess, 'Popen', new_callable=MagicMock) as process:
  process.communicate.return_value = [b'', b'']
  output, error = process.communicate()

我得到的错误信息是:

>       output, error = process.communicate()
E       ValueError: not enough values to unpack (expected 2, got 0)

有人可以指出我做错了什么,我试过带有和没有方形和花括号的回来。

2 个答案:

答案 0 :(得分:0)

process.communicate会返回一个元组而不是一个列表,因此您需要更改的是:

with patch.object(subprocess, 'Popen', new_callable=MagicMock) as process:
  process.communicate.return_value = (b'', b'')
  output, error = process.communicate()

通常在Python中,当你返回一个元组时,它可以返回一个元组指针或解压缩到多个值。有关详情,请访问here(Google首播)

答案 1 :(得分:0)

对于错误信息感到抱歉,但我发现错误是在代码的某些不同部分,并且上面提到的语法适用于我们没有任何支撑。