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