pytest-mock を使ってみた #python
概要
- Python のテストを Pytest で書いてみた
- Mock を使おうと思ったら pytest-mock という標準の薄いラッパーを使うのがいいらしい
- そもそも標準を知らないので少し苦労した
- なのでログとして残しておく
テスト対象
HTTPリクエストして、レスポンスを返すような処理を書いてみる。
レスポンスをモックしてテストしてみる。
import requests def sample(): try: # ここを Mock したい res = requests.get("http://checkip.amazonaws.com/") except requests.RequestException as e: print(e) raise e return { "statusCode": res.status_code, "ip": res.text, }
テストコード
本来なら 200 のレスポンスが返ってくるはずだが、 404 にしてみる
from hello_mock import app def test_sample(mocker): # 嘘のレスポンスを作成 responseMock = mocker.Mock() responseMock.status_code = 404 responseMock.text = '127.0.0.1' # requests.get の戻り値を patch する mocker.patch('requests.get').return_value = responseMock actual = app.sample() assert actual['statusCode'] == 404 assert actual['ip'] == '127.0.0.1'
補足
pytest-mock を使うと、 mocker 経由で Mock を扱えるので便利。
side-effect とかを使えば例外のテストなんかもできそう。