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

如何手动创建sqlalchemy.engine.row.Row对象用于DAO层单元测试mock?

两种实现方案可满足你的mock需求

方案1:直接构造真实的sqlalchemy.engine.row.Row对象

适用于需要严格匹配返回类型的场景,SQLAlchemy 1.4及以上版本可按如下方式构造:

from sqlalchemy.engine.row import Row

# 按顺序定义查询返回的字段名
field_keys = ("user_id", "user_name", "account_status")
# 按字段顺序对应填入mock值
field_values = (1001, "测试用户", 1)

# 生成Row对象,行为和真实查询返回的Row完全一致
mock_row = Row(field_keys, field_values)

构造完成后可以同时支持属性访问和键访问:

print(mock_row.user_id) # 输出 1001
print(mock_row["user_name"]) # 输出 测试用户

方案2:用Mock对象模拟Row行为(更适合单元测试场景)

不需要依赖SQLAlchemy内部实现,版本兼容性更好,不用关心Row的构造逻辑:

from unittest.mock import MagicMock

mock_row = MagicMock()
# 配置属性访问返回值
mock_row.user_id = 1001
mock_row.user_name = "测试用户"
mock_row.account_status = 1
# 配置字典形式的键访问逻辑
mock_row.__getitem__.side_effect = lambda key: getattr(mock_row, key)

如果你的DAO方法需要返回多行结果,直接将构造好的多个mock对象放入列表作为返回值即可。如果需要模拟.mappings()方法返回字典格式的行数据,额外补充配置:

mock_row.mappings.return_value = {"user_id": 1001, "user_name": "测试用户", "account_status": 1}

内容的提问来源于stack exchange,提问作者desap

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:06:03