首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlalchemy和pytest patching的模拟过滤参数

sqlalchemy和pytest patching的模拟过滤参数
EN

Stack Overflow用户
提问于 2019-01-24 21:18:24
回答 1查看 801关注 0票数 1

我想在这里为sqlalchemy .using会话编写一个测试用例来模拟filter(),以便在配置文件中创建.Session的对象上触发一个查询。.I能够模拟session.query(FleetEquipment),但是我如何也模拟filter参数呢?

代码语言:javascript
复制
def get_fleet_equipment_from_thirdparty(self, unit_address, thirdparty_company_id):
            result = session.query(FleetEquipment).filter(
                FleetEquipment.ThirdPartyUnitNumber == unit_address
                and FleetEquipment.ThirdPartyCompanyID == thirdparty_company_id)[:]

我模拟session.query参数的方式是

代码语言:javascript
复制
@patch("dao.db_config.session.query",fleetEquipmentMock)

这就是我创建这个模拟对象的方式

代码语言:javascript
复制
fleetEquipment = FleetEquipment(1,123,3,1,1,1)
fleetEquipmentMock = Mock()
fleetEquipmentMock.return_value = fleetEquipment

我怎样才能达到同样的效果。

如果我试着模仿所有的东西,比如

代码语言:javascript
复制
@patch("dao.db_config.session.query.filter",fleetEquipmentMock)

观察到以下异常:

代码语言:javascript
复制
AttributeError: <bound method Session.query of <sqlalchemy.orm.session.Session object at 0x00000239F059E198>> does not have the attribute 'filter'
EN

回答 1

Stack Overflow用户

发布于 2019-01-28 19:14:45

我这样做的方式是:

代码语言:javascript
复制
mock = MagicMock(name="mock")
@patch('dao.db_config.session.query',return_value=mock)
def get_fleet_equipment_from_thirdparty_test(self):
    mock.filter.return_value=MagicMock(name="filter")
    assert None==FleetEquipmentService.get_fleet_equipment_from_thirdparty(None,'123',3)
get_fleet_equipment_from_thirdparty_test()

但它需要改进/重构更多,一旦我改进了更多,请让我知道你的想法.Will更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54347608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档