You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何序列化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 10:13:29