我想在这里为sqlalchemy .using会话编写一个测试用例来模拟filter(),以便在配置文件中创建.Session的对象上触发一个查询。.I能够模拟session.query(FleetEquipment),但是我如何也模拟filter参数呢?
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参数的方式是
@patch("dao.db_config.session.query",fleetEquipmentMock)这就是我创建这个模拟对象的方式
fleetEquipment = FleetEquipment(1,123,3,1,1,1)
fleetEquipmentMock = Mock()
fleetEquipmentMock.return_value = fleetEquipment我怎样才能达到同样的效果。
如果我试着模仿所有的东西,比如
@patch("dao.db_config.session.query.filter",fleetEquipmentMock)观察到以下异常:
AttributeError: <bound method Session.query of <sqlalchemy.orm.session.Session object at 0x00000239F059E198>> does not have the attribute 'filter'发布于 2019-01-28 19:14:45
我这样做的方式是:
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更新。
https://stackoverflow.com/questions/54347608
复制相似问题