user3595026
user3595026

Reputation: 629

How to mock SQLAlchemy's limit and offset functions using MagicMock?

I am trying to write a unit test for SQLAlchemy's Limit Offset functions. I am new to Python unit testing and I am not sure how to mock the session.query(table).limit(20).offset(20) part. I use unittest.mock.patch to mock the load_session function. Any help would be appreciated. Thanks in advance. I have tried a few syntaxes but none of them worked. Example:

Source code:

    def execute():
        ...
        db2_engine = get_db2_engine()
        session = load_session(db2_engine)
        result_set = session.query(Table).limit(20).offset(20)
        db2_session.close()
        ...
    

Test code:

    import unittest
    from unittest.mock import MagicMock, patch

    def setUp(self):
        self.worker = MyClass(
            ...
        )

    @patch("source_class.load_session")
    def test_execute(self, mock_load_session):
        ...
        mock_session = MagicMock()
        mock_session.query.return_value = MagicMock()
        mock_session.query.return_value.limit.return_value = MagicMock()
        mock_session.query.return_value.limit.return_value.offset.return_value = [...]
        mock_load_session.return_value = mock_session
        ...

        self.worker.execute()
        ...

Upvotes: 0

Views: 161

Answers (0)

Related Questions