Skip to content

Instantly share code, notes, and snippets.

@sanoyo
Last active August 7, 2019 13:45
Show Gist options
  • Save sanoyo/f4a158bac758ebb46fa23c77fe84496a to your computer and use it in GitHub Desktop.
Save sanoyo/f4a158bac758ebb46fa23c77fe84496a to your computer and use it in GitHub Desktop.
モック

モック

ユニットテスト実行の流れ

実行手順

  1. prepare
    実行に必要なデータを準備する。

  2. execute
    テストするメソッドの実行

  3. verify
    期待する結果を準備する。
    実行した結果が、期待する結果になっているか確認する。

実行前に実装すべきこと

ここでは、pythonのテストが実行する前にclassで共通するものを格納しておきます。 initializeなどをよくここでします。

setUp, setDown

各テストメソッドの前後に実行される。

setUpClass, tearDownClass

クラス全体に1度だけ実行される。

patch デコレータ

@patch(使用したいメソッド)

class SampleTest(unittest.TestCase):
  @patch(test.mail.load)
  @patch(test.mail.save)
  def test_method_pattern1(self, save_mock, save_load): # 逆に引数を設定されるので注意
   # 値を設定する場合は、return_valueに値を入れる
    save.return_value = pd.read_csv('test.csv')
 
# こういう書き方もできるっぽい
@patch('myapp.utils.spam', return_value=100)

mockを設定するタイミング

実行した際に

種類

パッチ機能は、3種類があります。

  • mock.patch
  • mock.patch.object
  • mock.patch.dict

参考記事

return_valueとside_effect

return_valueside_effect を同時に指定した場合、side_effect が優先されるようです。

return_value

毎回同じ値を返します。

side_effect

異なった返却値を返せたり、例外を起こすことが可能です。

メソッドが呼ばれた時の引数を検証

call_args

(もし呼び出されたことがなければ) None、それ以外であれば最後に呼び出された時の引数を返します。

call_args_list

モックの呼び出しを順に記録したリストです。 複数回モックが呼ばれる際に使用します。 モックを作成してから一度も呼び出しを行なっていない場合は、空のリストが返されます。

参考記事

https://docs.python.org/ja/3/library/unittest.mock.html
http://note.crohaco.net/2015/python-mock/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment