Pythonのunittest
モジュールは、単体テストを行うための強力なツールです。その中でもpatch
は特に重要な機能で、テスト対象のプログラムの中で呼び出される関数について、未完成などの理由から取得したい戻り値が得られない場合に、想定される戻り値をテスト実施者が設定できるモジュールです。
patchの基本的な使い方
以下に、patchを使用した基本的なテストコードの例を示します。
import unittest
from unittest.mock import patch
from calc_project.src.calc import calc
class MyTestCase(unittest.TestCase):
@patch("calc_project.src.calc.calc.twice")
def test_calc_normal_case_1(self, twice_patch):
twice_patch.return_value = 4
result = calc.x_y_addition_and_twice(1, 1)
self.assertEqual(5, result)
if __name__ == "__main__":
unittest.main()
この例では、@patch
デコレータを使用してcalc_project.src.calc.calc.twice
関数をモック化しています。そして、twice_patch.return_value = 4
でモック化した関数の戻り値を設定しています。
patchを複数定義する方法
複数の関数をモック化する場合、@patch
デコレータをネストすることで実現できます。
from unittest.mock import patch
@patch('cPickle.dump')
@patch('__builtin__.open')
def test_write_out(mock_open, mock_pickle):
path = '~/collection'
f = mock_open.return_value
f.method.return_value = path
この例では、cPickle.dump
と__builtin__.open
の2つの関数をモック化しています。
以上、Pythonのunittest
モジュールのpatch
機能を活用したテストの書き方について解説しました。これらのテクニックを活用することで、より効率的なテストコードの作成が可能となります。.