Я пытаюсь сделать то, что мне кажется, должно быть довольно простым издевательством в 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, даже если я этого не хочу.
Как правильно насмехаться над этой функцией?
Спасибо!