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のコードのテストをより効率的に行うことができます。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です