Простая функция Mocking в Python - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь сделать то, что мне кажется, должно быть довольно простым издевательством в python.

У меня есть дерево, которое выглядит так:

- src
  - auth
    - authenticator.py
  - http_client
    - auth_client.py
- tests
  - test_authenticator.py

Мой authenticator.py выглядит так:

import sys
sys.path.append("src/http_client")

import auth_client

def authenticate_request(headers="", env="dev"):
   # logic...
   auth_client.do_auth(headers)
   # logic...

Тогда auth_client.py выглядит так:

import json
import requests

def do_auth(headers):
    url = "https://FAKE_URL.com"
    r = requests.get(url, headers)
    return r.json()

А у моего test_authenticator.py есть тест, похожий на

import mock

import sys
sys.path.append("src/auth")
sys.path.append("src/http_client")

import authenticator as auth
import auth_client

    @mock.patch('auth_client.do_auth')
    def test_good(self, mock_request):
        headers = FAKE_HEADERS
        mock_request.return_value = '{\"response:\": 200}'
        body, statusCode = auth.authenticate_request(
            headers=headers)
        self.assertEqual(200, statusCode)
        # self.assertEqual(body, "Token must have kid")


def mock_request():
    return "{\"response\":200}"

Но я не могу на самом деле издеваться над этой функцией. Когда я запускаю свои тесты с pytest, я попадаю в зону покрытия, что он попадает в auth_client, даже если я этого не хочу.

Как правильно насмехаться над этой функцией?

Спасибо!

...