アルパカログ

プログラミングとマネジメントがメインです。時々エモいのも書きます。

【Python3】範囲を限定してインスタンス/クラスメソッドをmockする

Pythonのテストでメソッドをmockするとき、インスタンスメソッドはよくMagicMockを使ってmockしますが、クラスメソッドの場合はmockするとテストケースが終わっても影響が残り続けてしまいます。

これはクラスとインスタンスのライフサイクルの違いによるもので、同じインスタンスを使い回している場合にはインスタンスメソッドにも同じことが言えます。

ではどうやって範囲を限定してメソッドをmockするかというと、unittest.mock.patch を使います。

from unittest.mock import MagicMock, patch

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

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

こちらもあわせて読みたい

alpacat.hatenablog.com

alpacat.hatenablog.com

alpacat.hatenablog.com