⛳
pytestで関数がn回呼ばれていることをテストしたい
問題
- pytestを使っている
- ある関数A内で関数Bがn回呼ばれることをテストしたい
- どうするか?
対応
pytest-mock を利用する。
例えば、
class FooApiClient:
def fetch(self, i: int):
return i
class Bar:
def __init__(self, foo: FooApiClient):
self.__foo = foo
def execute(self, count: int):
for i in range(count):
self.__foo.fetch(i)
FooApiClient
を利用する Bar
クラスがあるとする。
execute
を実行した際に fetch
がn回呼ばれたことをテストしたいとする。
下記のようにテストを書く。
import src.d_1208.sandbox
def test_s(mocker):
mocked = mocker.patch("src.d_1208.sandbox.FooApiClient.fetch")
foo = src.d_1208.sandbox.FooApiClient()
bar = src.d_1208.sandbox.Bar(foo)
bar.execute(2)
assert mocked.call_count == 2
ディレクトリ構成は下記。
├─src
│ └─d_1208
│ sandbox.py
│
└─test
│ test_1208.py
Discussion