Не могу использовать функции monkeypatch на python + pytest - PullRequest
0 голосов
/ 22 сентября 2019

Мне нужно monkeypatch некоторых функций в проекте, для которого я пишу тесты, но перед этим я создал простой проект, чтобы опробовать его (в основном он использует request.get для вызова API ipify, чтобы получить мой публичный IP, и яя пытаюсь установить патч для функции request.get ИЛИ функции из моего собственного кода, который вызывает request.get, чтобы вернуть фиксированное значение - в данном случае «0.0.0.0».

Структура проектавыглядит следующим образом:

  • корневой каталог
    • ipify_api (мой пакет)
      • method.py (здесь у меня есть функция, которая возвращает публичный IP, возвращенный API)
      • helpers.py (здесь у меня есть функция, которая вызывает API и возвращает ответ)
    • tests
      • test_ipify.py

Код проекта:

ipify_api / helpers.py

from requests import get

def request_ipify_api():
    r = get("https://api.ipify.org/?format=raw")
    return r

ipify_api / Methods.py

from .helpers import *

def get_public_ip() -> str:
    r = request_ipify_api()
    return r.text

tests / test_ipify.py

import requests
import ipify_api
# import ipify_api.helpers

class FakeResponse:
    text: str

class TestIpifyAPI:
    @staticmethod
    def __get_fake_response():
        r = FakeResponse()
        r.text = "0.0.0.0"
        return r

    def test_get_public_ip(self, monkeypatch):
        """Calling methods.get_public_ip() should return 0.0.0.0
        """
        # monkeypatch.setattr(ipify_api.helpers, "request_ipify_api", self.__get_fake_response)
        monkeypatch.setattr(requests, "get", self.__get_fake_response)
        assert ipify_api.get_public_ip() == "0.0.0.0"

Проблема в том, что настоящая функция продолжает вызываться, поэтому я не получаю ожидаемый результат "0.0.0.0", а вместо этого мой реальный IP (потому что вызывается реальный request.get).Исправление моей собственной функции ipify_api.helpers.request_ipify_api () дает тот же результат.

Насколько я понимаю, я делаю то, что заявляет документация pytest для функций исправления обезьян: https://docs.pytest.org/en/latest/monkeypatch.html#simple-example-monkeypatching-functions

...