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

【Python】今、Pythonで新規テストを書くなら pytestがおすすめ?

要旨

  • 標準で備わっている仕組みはunittest
  • 現在のでファクトはpytest

詳細

単純に数だけで比較するのも議論の余地があるが、ひとまず参考として pytest は少なくとも標準パッケージよりは主流と言っても良いかもしれない。

pytest でPythonのリポジトリを検索した結果

11,699 repository results

github.com

unittest でPythonのリポジトリを検索した結果

4,107 repository results

github.com

参考

docs.pytest.org

docs.python.org

rinatz.github.io

myenigma.hatenablog.com