Python中如何Mock返回整数与OrderedDict的方法?
Python中Mock返回整数与OrderedDict的方法
在Python中,Mock返回包含整数和OrderedDict的多个值,核心是利用函数返回多值本质为返回元组的特性,直接将Mock的return_value设为对应元组即可。以下是具体实现示例:
基础用法示例
假设你要Mock某个类的方法,比如SomeService.get_data(),该方法实际返回(整数, OrderedDict):
from unittest.mock import Mock from collections import OrderedDict # 模拟目标类的实例 mock_service = Mock() # 设置Mock方法的返回值:整数 + OrderedDict mock_service.get_data.return_value = (456, OrderedDict({'x': 10, 'y': 20})) # 调用Mock方法并解构返回值 count, data_dict = mock_service.get_data() print(count) # 输出: 456 print(data_dict) # 输出: OrderedDict([('x', 10), ('y', 20)])
使用patch装饰器的场景
如果需要在单元测试中Mock模块中的方法,可结合@patch装饰器:
from unittest.mock import patch from collections import OrderedDict from your_module import SomeService, your_test_function def test_get_data(): with patch.object(SomeService, 'get_data') as mock_get_data: # 设置返回值 mock_get_data.return_value = (789, OrderedDict({'foo': 'bar', 'baz': 'qux'})) # 执行被测试函数(该函数内部会调用SomeService.get_data()) result_count, result_dict = your_test_function() # 断言验证 assert result_count == 789 assert result_dict['baz'] == 'qux' mock_get_data.assert_called_once()
注意事项
- Python 3.7及以上版本中,普通
dict已默认保持插入顺序,但如果业务明确依赖OrderedDict,仍需显式使用collections.OrderedDict构造对象。 - 若需要动态生成返回值(而非固定元组),可使用
side_effect属性,传入一个返回该元组的函数即可。
内容的提问来源于stack exchange,提问作者Himakar
相关产品推荐
相关产品推荐

