Site cover image
Python テストでクラスメソッドをモックする方法(unittest.mock)

Python3において、メソッドをモックしてテストしたいときがあります。

メソッドのモックにはunittest.mock.MagicMockがよく使われます。

しかし、MagicMockを使ってクラスメソッドをモックすると、テストケース終了後も影響が残ってしまいます。

このエントリでは、範囲を限定してクラスメソッドをモックする方法を紹介します。

MagicMockでクラスメソッドをモックした場合、インスタンスメソッドと違って、テストケース終了後も影響が残ってしまいます。

これは、インスタンスとクラスのライフサイクルの違いによるものです。

同じインスタンスを使い回している場合には、インスタンスメソッドにも同じことが起こります。

範囲を限定してメソッドをモックするにはpatchメソッドを使います。

patchメソッドを使うにはunittest.mockモジュールからインポートします。

from unittest.mock import MagicMock, patch

with patch('module.Foo.bar', MagicMock(return_value='mocked value')):
    # call method

こうすることで、withブロック内においてmodule.Foo.barメソッドは'mocked value'を返します。

また、patchメソッドは@patch('module.Foo.bar', 'mocked_value')のようにデコレータとして使うこともできます。

詳しくは下記をご覧ください。

以上です。このエントリでは、範囲を限定してクラスメソッドをモックする方法を紹介しました。

Thank you!
Thank you!
URLをコピーしました

コメントを送る

コメントはブログオーナーのみ閲覧できます