Pythonのunittestモジュールは、Pythonの標準ライブラリの一部で、ユニットテストをサポートするためのものです。unittest.mockは、テスト中のシステムの一部をモックオブジェクトに置き換えて、それらがどのように使用されたかについてのアサーションを許可するライブラリです。
unittest.mockの基本的な使い方
以下に、unittest.mockの基本的な使い方を示します。
from domain import Hoge
import unittest
from unittest.mock import MagicMock
class TestHoge(unittest.TestCase):
def test_retry_with_error(self):
# execute()が1回だけ呼ばれることを確認
mock = MagicMock()
Hoge().retry_with_error(mock)
mock.execute.assert_called_with() # 実行されることを確認
この例では、MagicMock()
を使用してmock
オブジェクトを作成し、Hoge().retry_with_error(mock)
を呼び出しています。その後、mock.execute.assert_called_with()
を使用してexecute()
が呼び出されたことを確認しています。
unittest.mockで例外を扱う方法
unittest.mockを使用して例外を扱う方法もあります。以下にその例を示します。
from unittest.mock import MagicMock
mock2 = MagicMock()
mock2.execute = MagicMock(side_effect=[Exception('first error'), None])
Hoge().retry_with_error(mock2)
self.assertEqual(mock2.execute.call_count, 2) # executeで毎回Exception発生する場合は、3回実行して例外投げる
この例では、side_effect
を使用してexecute()
が呼び出されたときの動作を制御しています。最初のexecute()
で例外が発生すると、再試行が行われ、2回目のexecute()
は例外を投げずに終了します。
以上がPythonのunittestとmockの基本的な使い方になります。これらの機能を活用することで、Pythonのコードのテストをより効率的に行うことができます。