Параметр насмешливого фильтра в патчах sqlalchemy и pytest - PullRequest
0 голосов
/ 24 января 2019

Я хочу написать тестовые сценарии для mock filter () для сеанса sqlalchemy .using, чтобы запустить запрос объекта. В файле конфигурации создается сеанс. Я могу имитировать session.query (FleetEquipment), ноКак я могу издеваться над параметром фильтра, а также.

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'

1 Ответ

0 голосов
/ 28 января 2019

Я сделал так:

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()

Но это будет улучшено / переработано больше. Пожалуйста, дайте мне знать ваши мысли. Буду обновлять, как только я уточню это больше.

...