関数をモックに差し替えるけど、引数の値によっては元々の関数で処理したい、という場合のメモです。
まずは、モックに差し替える関数の例。
def myfunc(cond):
return f"original: {cond}"
pytest で実行するテストコード。
モックに差し替える前に、元の関数を org_myfunc に保持し、差し替えたモック内で引数を判定して処理を分岐させます。
import mdl
import pytest
def test_myfunc(mocker):
org_myfunc = mdl.myfunc
def mock_myfunc(cond):
if cond:
return f"mock: {cond}"
else:
return org_myfunc(cond)
mocker.patch("mdl.myfunc", side_effect=mock_myfunc)
assert mdl.myfunc(True) == "mock: True"
assert mdl.myfunc(False) == "original: False"
コメント