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
フレームワークを使用して効率的なテストを作成することができます。