django テストコード mock patch
テストコード ✕ mock ✕ patch
djangoでテストコード書くときに、APIにアクセスする処理をテストするために、mockでpatchした時のメモ。
def _call_api(self, send_data): """ api呼ぶだけの関数 :param send_data: :return: response """ return requests.post(self.endpoint, data=send_data)
from unittest import mock from django.test import TestCase class ApiBatchTest(TestCase): # アノテーションで、中身を変えたい関数を指定 @mock.patch('path.to.Class._call_api') def test_api(self, mock_get): # mock_get(引数)で、変更したい関数のmockを受取、return_value(戻り値)を好きな状態に書き換える mock_get.return_value.status_code = 200 mock_get.return_value['status'] = 200 def json(): """ 期待するresponseのjson()の結果っぽく作った。 """ return { 'result': { 'A': 0.5, 'B': 0.5, 'C': 0.5 }, 'attention': 'test', 'status': 200 }; setattr(mock_get.return_value, 'json', json) # 上記によって、テスト実行される関数の中身のstatus_codeや、response.json()が上記の内容となる。