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