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...