2021年7月15日木曜日

requests を monkeypatch する方法

requests を monkeypatch する方法

概要

requests の get を pytest の monkeypatch でモックしてみたいと思います

環境

  • macOS 11.4
  • Python 3.8.3
  • requests 2.25.1
  • pytest 6.2.4

サンプルコード

import requests

def get_access():
    result = requests.get("http://localhost")
    return result.status_code

テストコード

  • vim test_test.py
import requests
from test import get_access

class MockResponse:

    def __init__(self, code=200):
        self.status_code = code
        self.text = ""

    @staticmethod
    def json():
        return {"": ""}

def mock_get(*args, **kwargs):
    return MockResponse()

def test_get_access(monkeypatch):
    monkeypatch.setattr(requests, "get", mock_get)
    result = get_access()
    assert(result == 200)

解説

ポイントは mock_get と MockResponse です 本来 get が返すべきクラスを自分が作成したクラスにすげ替えてあげる感じになります

これで実際にはアクセスせずテストすることができるようになります

0 件のコメント:

コメントを投稿