如何序列化unittest.mock.Mock对象?
解决unittest.mock.Mock对象JSON序列化问题
简便实现方案
1. 递归处理嵌套Mock的default函数
直接写一个轻量的递归函数作为json.dumps的default参数,自动解析Mock对象及其嵌套的Mock属性:
import json from unittest.mock import Mock def serialize_mock(obj): if isinstance(obj, Mock): # 过滤Mock内部私有属性,只保留自定义属性并递归处理嵌套 return {k: serialize_mock(v) for k, v in obj.__dict__.items() if not k.startswith('_')} return obj # 使用示例 mock_obj = Mock() mock_obj.name = "test" mock_obj.nested = Mock() mock_obj.nested.value = 123 print(json.dumps(mock_obj, default=serialize_mock))
2. 简洁lambda写法(适用于无嵌套场景)
如果你的Mock没有嵌套结构,用一行lambda就能搞定:
json.dumps(mock_obj, default=lambda o: {k: v for k, v in o.__dict__.items() if not k.startswith('_')} if isinstance(o, Mock) else o)
优势说明
- 无需额外依赖,直接通过
json.dumps的default参数解决问题 - 递归版本自动处理嵌套Mock,覆盖绝大多数单元测试场景
- 过滤私有属性避免序列化Mock内部的冗余数据,输出更干净
内容的提问来源于stack exchange,提问作者djvg
相关产品推荐
相关产品推荐

