Почему в Python стоит подменять свой интерфейс, а не httpx
Если бизнес-тест напрямую подменяет httpx.Client и httpx.Response, даже проверка пустого списка требует трёх вложенных моков. Тест повторяет чужой API, а его смысл тонет в настройке объектов.
Автор предлагает поставить между бизнес-логикой и httpx тонкий DockerRegistryClient с методами get_repos() и get_repo_tags(). Бизнес-код работает с понятными операциями, тест подменяет один собственный объект, а смена HTTP-библиотеки не затрагивает эти проверки. Вложенность отступает перед явным интерфейсом: вполне по-питоновски.
В статье «Don’t Mock What You Don’t Own» in 5 Minutes есть код до и после рефакторинга и границы эвристики. Обёртка не нужна, если сторонний API уже удобен; для редких сетевых ошибок прямой мок тоже может оказаться проще.
Post #5004
891
