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')のようにデコレータとして使うこともできます。
詳しくは下記をご覧ください。
以上です。このエントリでは、範囲を限定してクラスメソッドをモックする方法を紹介しました。
コメントを送る
コメントはブログオーナーのみ閲覧できます