dogwood008の開発メモ!

最近のマイブームは機械学習, Ruby on Rails。中でも機械学習を使った金融商品の自動取引に興味があります。

【Python】テスト時、特定の関数の動作をモックする

要旨

下記のようにモックを定義する。

import pandas as pd
from unittest.mock import MagicMock
import jquantsapi

mock = MagicMock(return_value=pd.DataFrame())
cli = jquantsapi.Client(refresh_token="dummy")
cli.get_prices_daily_quotes = mock

下記のように呼び出すと、モックされたメソッドが呼ばれ、規定した値を返す。

cli.get_prices_daily_quotes()
# => Empty DataFrame
# => Columns: []
# => Index: []

詳細

MagicMock(return_value=pd.DataFrame())

上記のように、 MagicMock を初期化する際、 return_value に渡してやった値が、全ての mock.*() の戻り値となる。

要旨の部分では、 mock.get_prices_daily_quotes() を呼んでいるが、このメソッド名だけでなく、いかなるメソッド名で呼んでも、 return_value で規定した値が返るようになる。

参考

github.com