Pythonのunittest.mockモジュールは、テスト中にシステムの一部をモックオブジェクトに置き換え、それらがどのように使用されたかについてアサーションを行うことができるライブラリです。
モックの基本
unittest.mockには、テストスイート全体でスタブを作成する必要性を排除するための中心的なMockクラスが提供されています。アクションを実行した後、どのメソッドや属性がどのような引数で呼び出されたかについてアサーションを行うことができます。
from unittest.mock import MagicMock
thing = ProductionClass()
thing.method = MagicMock(return_value=3)
thing.method(3, 4, 5, key='value') # returns: 3
thing.method.assert_called_with(3, 4, 5, key='value')
また、unittest.mockは、テストのスコープ内でモジュールやクラスレベルの属性をパッチするpatch()デコレータも提供しています。
SQLクエリのモック
SQLAlchemyのセッションとデータをモックするためにalchemy_mockを使用することもできます。また、SQLiteからの任意の呼び出しチェーンをモックし、pd.read_sql_queryの戻り値をモックすることも可能です。
from alchemy_mock.mocking import UnifiedAlchemyMagicMock
db_session = UnifiedAlchemyMagicMock()
db_session.query.return_value.all.return_value = [1,2,3]
mock_res = test_asd(db_session)
self.assertEqual(mock_res, [1,2,3])
これらのテクニックを使用することで、Pythonのunittestフレームワークを使用して効率的なテストを作成することができます。