TGViewer
Валерий | AQA Engineer | Автотестирование на Python | REST, gRPC, GraphQL Валерий | AQA Engineer | Автотестирование на Python | REST, gRPC, GraphQL @aqa_engineer · 1.52K subscribers
Post #388 866
Привет! Обычно вам заходят посты про unittest-ы вот вам ещё один.

Где и как это применить — подумайте сами, а пока просто интересный пример.

Допустим, у нас есть клиент:

class Client:
...

def execute(
self,
query: str,
variables: dict[str, Any] | None = None,
operation_name: str | None = None,
headers: dict[str, Any] | None = None,
**kwargs: Any,
) -> dict[str, Any]:
headers = headers or {}
url = self._get_base_url()
final_headers = self._default_headers()
final_headers.update(headers)

transport = HTTPXAsyncTransport(url=url, headers=final_headers)
result = transport.execute(query, variables, operation_name)
return result


Здесь внутри метода:
- есть логика получения актуального host:
url = self._get_base_url()

- логика сборки заголовков:
final_headers = self._default_headers()

Наша задача — проверить, что всё это правильно собирается и передаётся в HTTPXAsyncTransport.

Но ведь он создаётся прямо внутри метода!
Как же его подменить? 🤔

Вот как можно сделать:
from unittest import patch, Mock

@pytest.fixture
def client() -> Client:
return Client()

@pytest.fixture
def transport():
with patch("lib.client.HTTPXAsyncTransport") as mock_transport:
mock_transport.return_value = Mock()
yield mock_transport

def test_execute(client: Client, transport):
client.execute("query")
assert transport.call_args_list == [
call(
url="http://google.com",
headers={
"Content-Type": "application/json",
"Authorization": "Bearer token",
"User-Agent": "MyApp/1.0"
}
)
]


Что происходит:
1. Мы патчим HTTPXAsyncTransport, подсовываем туда Mock
2. Вызываем client.execute(...)
3. Проверяем, что transport действительно получил нужные аргументы

✅ Проверили не только что вызвался метод, но и что внутренняя логика клиента корректно отработала

——————————-

📱 TG-сообщество

📱 Обучение

📱 Отзывы
  • 👍 6
  • 🔥 6
More from @aqa_engineer
  1. Sep 2, 2026💙💙💙💙💙 Маленькое напоминание о большой дате: где стоит провести День программиста⬆️ Ар…
  2. Sep 2, 2026Привет, давно меня не было пригар по работе, что совсем не успеваю ничего. За что прошу пр…
  3. Jul 16, 2026👩‍💻 В мае-июне я проходила курс «Автоматизация тестирования Rest API Advanced (Python)»…
  4. Jun 10, 2026Привет! Уже на следующей неделе у меня стартуют. Автоматизация тестирования брокеров сообщ…
  5. Jun 8, 2026Несколько месяцев назад я спросил, какой технический тренинг вам был бы действительно инте…
  6. Jun 6, 2026Материалы для тех, кто в теме. Одна из самых больших проблем при развитии в IT - это возмо…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →