Mocking session.add и возврат первичного ключа, который был бы сгенерирован таблицей базы данных - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь смоделировать sqlalchemy session.add так, чтобы при вставке session.add (order) и его фиксации он возвращал мне order.orderId, который я буду использовать для дальнейшего расширения тестового примера.

   session.add(order)
        session.commit()
        return order.orderId

У меня есть сессия sessionMaker, т. Е. mocker.patch.object(file_name, "create_pgdb_engine"), которая возвращает меня, но я получаю сообщение об ошибке, например

Экземпляр имеет идентификационный ключ NULL.Если это автоматически сгенерированное значение, убедитесь, что таблица базы данных позволяет генерировать новые значения первичного ключа и что сопоставленный объект Column настроен на ожидание этих сгенерированных значений.Также убедитесь, что этот flush () не происходит в неподходящее время, например, в событии order ().

1 Ответ

1 голос
/ 17 апреля 2019

Попытка макета компонентов базы данных более низкого уровня для создания фиктивных объектов, вероятно, не очень хорошая стратегия для тестирования.Если вы пытаетесь смоделировать объекты sqlalchemy для целей модульного тестирования, посмотрите на Factory-boy .Посмотрите полный пример здесь того, как можно построить тестовый фреймворк с использованием sqlalchemy и factory-boy.

...