クラス外メソッドをモックにする必要があった為、その方法のメモ書き。
例として、以下の「time_util.py」があったとします。
time_util.py
import time
def time_msec() -> int:
return int(time.time() * 1000)
「time_util.py」は、pyファイルに直にメソッドが記載されているもので、
これをpytest-mockを利用して、モック化する場合に、以下の記述でモック化する事が出来ませんでした。
test01.py(修正前)
import time_util
class Test正常系():
def test_正常ケース(self, mocker):
# time_msecをモックにする
mock_test = mocker.patch("time_util.time_msec")
mock_test.return_value = 1000
上記の形で実行してもコード上は実行時エラーとならず進みますが、実際にはモック化出来ておりません。
方法として、「time_util.py」をimportしている個所(※ここでは仮に、xxx_class.pyで使用しているとする)をモック化します。
test01.py(修正後)
import time_util
import xxx_class
class Test正常系():
def test_正常ケース(self, mocker):
# time_msecをモックにする
mock_test = mocker.patch("xxx_class.time_util.time_msec")
mock_test.return_value = 1000
上記のような形で、うまくモック化する事が出来ました。
※まぁそもそもpyファイル内で、クラス化していないのもどうかと思うが。。
解決した方法のメモ書き程度にとらえて頂ければ幸いです。