[Python] Cannot mock python function called during import

Discussão em 'Python' iniciado por Stack, Julho 24, 2025.

  1. Stack

    Stack Membro Participativo

    I am trying to mock a sqlalchemy create_engine method called during import of a python script. But I am not able to properly do so. Here is my file structure:

    File main.py

    from database_wrapper import update_database

    def do_something():
    # do something and
    update_database()


    database_wrapper.py

    from sqlalchemy import create_engine

    engine = create_engine("connection_uri")


    def update_database() -> bool:

    con = engine.connect()
    # do something with the connection, and so on...


    In my test unit i do something like:


    class TestMicroservice(TestCase):

    @patch('database_wrapper.create_engine')
    @patch('main.update_database')
    def test_1(self, update_database_mock, create_engine_mock):

    create_engine_mock.return_value = "Fake engine, babe"
    update_database_mock.return_value = True

    from main import do_something

    do_something()


    I have also tried @patch('main.database_wrapper.create_engine'), @patch('main.database_wrapper.sqlalchemy.create_engine'), @patch('sqlalchemy.create_engine') and many other variations but with no luck. I have read a few similar posts but couldn't find this exact case. I would rather avoid changing database_wrapper.py, hence i cannot move engine = create_engine("connection_uri"). Also because I am happy to create the engine when the program start without having to pass it around.

    Continue reading...

Compartilhe esta Página