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.