python - 在 Python 中模拟数据类时如何使用规范
问题描述
我正在尝试使用 backport 包将我们的 namedtuple 类移植到 Python 3.6 中的数据类中。但是,我注意到在模拟数据类类时,您不能再使用“spec”关键字了。我认为这是因为数据类代码是自动生成的。
from dataclasses import dataclass
import mock
@dataclass
class A:
aaa: str
bbb: int
m = mock.Mock(spec=A)
m.aaa
这是我得到的错误:
AttributeError: Mock object has no attribute 'aaa'
知道是否有任何方法可以自动将原始对象的所有属性设置为模拟对象?我有很多包含大量数据的数据类。如果我尝试手动设置值,那将非常乏味。
解决方案
我最终使用这个通用辅助函数来实现规范对常规类的作用:
import mock
from dataclasses import fields
def create_dataclass_mock(obj):
return mock.Mock(spec=[field.name for field in fields(obj)])
推荐阅读
- django - Django - 在查询中加入 3 个模型
- node.js - 必须使用 import 加载 Babel 模块中的 ES 模块 NODEJS 错误
- amazon-web-services - AWS API 网关 + Lamda(非异步)+ fetch(异步)
- javascript - 当我不希望它水平滚动时如何修复我的表格宽度
- javascript - 过滤时找不到数据时如何显示错误消息
- c# - 如何使用 RaspberryPi 在 asp.net mvc 中编写 windows 窗体或 web 应用程序?
- python - 使用 PyRFC 提取 RAW 数据类型列的问题
- vb.net - 我无法通过 Visual Basic 将新行保存到 Microsoft Access 数据库中
- ios - 如何使用核心数据将对象传递给 SwiftUI 中的其他视图
- python - 使用 zip 函数返回一个空元组