Pythonのテストライブラリであるunittest.mock
は、システムの一部をモックオブジェクトに置き換えて、それらがどのように使用されたかについてアサーションを行うことができます。unittest.mock
は、テストスイート全体でスタブを作成する必要性を排除するためのコアMockクラスを提供します。
Mockの基本的な使い方
まずは、Mockの基本的な使い方から見ていきましょう。以下に、Mockを使用して関数の戻り値を変更する基本的な例を示します。
from unittest import mock
# Mockオブジェクトの作成
mock_func = mock.Mock()
# Mockの戻り値を10に設定
mock_func.return_value = 10
# Mock関数の呼び出し
result = mock_func()
# 結果の確認
print(result) # 10
このコードでは、mock.Mock()
を使用してMockオブジェクトを作成し、mock_func.return_value = 10
でMock関数の戻り値を10に設定しています。その後、mock_func()
でMock関数を呼び出し、その戻り値が10であることを確認しています。
Mockでできること
Mockを使うと、以下のようなことができます。
- 関数の戻り値を変える
- 関数から例外を投げる
- 関数が呼ばれた回数をカウントする
- 関数が受け取った引数を記憶する
これらの機能を使うことで、テストコードを書く際に、他の関数の影響を受けずに関数をテストすることが可能になります。
Mockの応用:例外の投げ方
Mockを使って関数から例外を投げる方法を見てみましょう。以下に、Mock関数から例外を投げる例を示します。
from unittest.mock import Mock
# Mockオブジェクトの作成
mock_func = Mock(side_effect=KeyError('foo'))
# Mock関数の呼び出し
try:
result = mock_func()
except KeyError as e:
print(e) # 'foo'
このコードでは、Mock(side_effect=KeyError('foo'))
を使用して、Mock関数が呼び出されたときにKeyError
を投げるように設定しています。その後、mock_func()
でMock関数を呼び出し、その結果としてKeyError
が投げられることを確認しています。
以上、Pythonのunittest.mock
ライブラリを使用したテストの基本的な方法と応用例について説明しました。これらの知識を活用して、より効率的なテストコードの作成を行ってみてください。