あなたは何か他のものでrequests.post
を置き換えるためにmock
ライブラリを使用することができます。
with mock.patch('requests.post') as mock_post:
foo.send_report(data)
(mock
はthird-party packageですが、Pythonの3.3で、unittest
package`の一環として、標準ライブラリに追加されました。 )
mock_post
は、テスト中に望ましい動作を提供するように設定できます。詳細はmock
のドキュメントを参照してください。
別のオプションはではなく、引数としてpost
機能を取るためにあなたの方法を変更することでハードコーディング(これは依存性注入の一例である)機能を:
def send_report(self, data, poster=requests.post):
url = settings.WEBHOOK_PO
payload = json.dumps(data)
poster(url, data=payload)
url = settings.WEBHOOK_LQA
response = poster(url, data=payload)
return response.status_code
関数をテストしたい場合は、別の呼び出し可能オブジェクトをオプションの第2引数として渡します。モックと比べてテストすることが容易になるかもしれないあなたはポストの2種類の別々の機能を供給することができ
注:
from functools import partial
def send_report(self,
data,
post_po=partial(requests.post, settings.WEBHOOK_PO),
post_lqa=partial(requests.post, settings.WEBHOOK_LQA)):
payload = json.dumps(data)
post_po(data=payload)
response = post_lqa(data=payload)
return response.status_code
一つのオプション:https://github.com/getsentry/responses – jonrsharpe