LoginSignup
0
0

More than 1 year has passed since last update.

unittestで動的にmock responseを帰る

Posted at

はじめに

unittest.mockのpatchメソッドではmockのresponseを送信することはみなん知っていると思いますが、しかし、請求URLなどより動的にmock responseを作ることはどう実現できるでしょうか?この記事ではそれを実現するための方法を紹介します。

return_valueとside_effect

簡単にまとめる、こんな感じ:

  • モックを呼び出したときに(毎回同じ)返り値を返してほしい場合はreturn_value属性を設定する。
  • モックを呼び出すたびに異なる返り値を返してほしい場合はside_effect属性に渡す。

今回は可変な返り値を返してほしいのでside_effect属性を利用します。

コード例

import json
from unittest.mock import patch
from requests import Response

def mocked_request_get(*args, **kwargs):
    response_content = None
    request_url = kwargs.get('url')
    if request_url == 'aurl':
        response_content = json.dumps('a response')
    elif request_url == 'burl':
        response_content = json.dumps('b response')
    elif request_url == 'curl':
        response_content = json.dumps('c response')
    response = Response()
    response.status_code = 200
    response.content = str.encode(response_content)
    return response

@patch('requests.get', side_effect=mocked_requests_get)

ここに注意すべきなのはkwargs.get('url')のところ請求requestによりコードを変わる必要があります。以上のようなmocked_request_getで請求requestより違うresponseを作成し、patchメソッドのside_effect属性を利用して、mockのresponseを作ることができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0