Pythonのunittestモジュールでは、テスト対象の関数やメソッドが返す値を制御するためにpatchreturn_valueを使用します。これにより、テスト対象のコードが依存する部分を制御し、テストをより柔軟に、かつ確実に行うことができます。

patchとreturn_valueの基本的な使い方

まずは、patchreturn_valueを使った基本的な例から見ていきましょう。以下のコードは、random.choice関数をパッチして常に2を返すようにしています。

import random
from unittest.mock import patch

with patch("random.choice") as mock_choice:
    mock_choice.return_value = 2  # withブロックの中では2しか返らなくなります
    for i in range(5):
        print(random.choice([1, 2, 3, 4, 5]))  # すべて2が出力されます

このコードを実行すると、random.choice関数は常に2を返すようになります。つまり、return_valueを使うことで、パッチした関数の返り値を自由に制御できるのです。

patchとreturn_valueを使ったテストコードの例

次に、patchreturn_valueを使ったテストコードの例を見てみましょう。以下のコードは、Sampleクラスのmainメソッドをテストしています。

import unittest
from sample import Sample

class TestSample(unittest.TestCase):
    def setUp(self):
        """ Set object """
        self.obj = Sample()

    def tearDown(self):
        """ Initiallize the object """
        self.obj = None
        self.number = None

    def test00_no_mock(self):
        """ test without mock """
        self.number = self.obj.main()
        self.assertEqual(self.number, 2)

このテストコードでは、Sampleクラスのmainメソッドが2を返すことを確認しています。しかし、mainメソッドが内部で依存している他のメソッドや関数の挙動を制御したい場合はどうすればよいでしょうか。そのような場合には、patchreturn_valueを使います。

以上、Pythonのunittestモジュールでpatchreturn_valueを使う方法について説明しました。これらの機能を使うことで、テスト対象のコードが依存する部分を制御し、テストをより柔軟に、かつ確実に行うことができます。ぜひ活用してみてください。

投稿者 admin

コメントを残す

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