Перейти к содержанию

Стратегия тестирования

SDK тестируется через публичные контракты: доменные методы, typed-модели, exceptions и avito.testing. Тесты не должны подменять приватные поля клиента или зависеть от настоящего HTTP там, где сценарий можно проверить fake transport.

Уровни

Уровень Что проверяет
Unit Мапперы, сериализация моделей, validation
Contract Публичная поверхность, все Swagger bindings, все numeric Swagger error responses, deprecated warnings
Domain Доменные методы поверх FakeTransport
Docs README/tutorials/how-to snippets через mktestdocs
Build gates Swagger binding discovery, reference surface, docstring contract

FakeTransport

FakeTransport сценарно описывает HTTP-ответы и записывает запросы. Это публичный testing namespace, поэтому consumer-код может строить тесты без реального Avito API, без OAuth-секретов и без monkeypatch приватных атрибутов.

Docs-harness использует тот же подход: AvitoClient.from_env() в markdown-примерах возвращает клиент поверх fake transport, поэтому copy-paste snippets проходят в CI без сетевых запросов.

Swagger contract coverage

SwaggerFakeTransport строит вызовы по discovered @swagger_operation metadata и проверяет фактический HTTP-запрос against локальный Swagger corpus. Contract suite содержит один request case на каждый discovered binding и один error case на каждый numeric Swagger error response. Если generated call, required parameter, content type, status или exception mapping расходятся со Swagger, тест падает без allowlist.

Почему не мокать domain methods

Если тест подменяет account().get_self() напрямую, он проверяет только consumer-код. Если тест строит AvitoClient поверх fake transport, он дополнительно проверяет HTTP path, payload, mapper и публичную модель. Поэтому fake transport ближе к реальному интеграционному контракту.

Практический reference по testing API смотрите в reference по тестированию.