Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 模拟补丁多次_Python_Unit Testing_Mocking - Fatal编程技术网

Python 模拟补丁多次

Python 模拟补丁多次,python,unit-testing,mocking,Python,Unit Testing,Mocking,我试图从一个测试用例中模拟一个模块中的多个函数: from mock import patch, DEFAULT, Mock function_a = Mock() function_a.return_value = ['a', 'list'] with patch.multiple('target.module', function_a=function_a, function_b=DEFAULT) as (f

我试图从一个测试用例中模拟一个模块中的多个函数:

from mock import patch, DEFAULT, Mock

function_a = Mock()
function_a.return_value = ['a', 'list'] 
with patch.multiple('target.module',
                    function_a=function_a,
                    function_b=DEFAULT) as (f_a, f_b):
令我惊讶的是,这不起作用,给了我以下回溯:

ValueError: need more than 1 value to unpack

使用:

因此,从该文档页面链接到:

如果patch.multiple用作上下文管理器,则上下文管理器返回的值是一个字典,其中创建的模拟按名称键入


但是你已经有了补丁的
。多个(…)as(f_a,f_b)
-两个值。看起来应该是带有补丁的
。多个(…)作为fdict
fdict
将是一个字典,其中包含
函数a
函数b
,用于
补丁。多个(
),将补丁函数名(
函数a
)分配给
默认值以外的任何值,或
unittest.mock.DEFAULT
,将导致返回的字典不包含mock函数

换句话说,
使用patch.multiple('target.module',func_a=SOME_VALUE,func_b=DEFAULT)作为模拟的
:
模拟['func_a']#键错误:“func_a'

另外,使用patch.multiple(…)as(f_a,f_b)
分配
,将给您两个字符串,在您的情况下是
'function_a'
'function_b'
。这相当于操作

x = dict(function_a = MagicMock_a, function_b = MagicMock_b)
(f_a, f_b) = x
f_a    # 'function_a'
如果希望访问
MagicMock
对象,请将其指定给dictionary值,例如
mocks['func\u a']=f\u a