
Black-box тесты на Java: функциональные тесты за секунды и в параллель и почему я остался на своих
igoresha_s 15 минут назад Black-box тесты на Java: функциональные тесты за секунды и в параллель и почему я остался на своих Средний 7 мин 353 Тестирование IT-систем * Java * Программирование * Тестирование веб-сервисов...
GPT-5.6 31 Temmuz 2026'da yayınlanacak mı?
В сфере искусственного интеллекта произошло заметное событие. igoresha_s 15 минут назад Black-box тесты на Java: функциональные тесты за секунды и в параллель и почему я остался на своих Средний 7 мин 353 Тестирование IT-систем * Java * Программирование * Тестирование веб-сервисов * Качество кода * Мнение TL;DRЯ наткнулся на подход к функциональным тестам, который меня по-настоящему удивил. Тесты в нём вообще не знают, что внутри Spring. Они стучатся в реально поднятый сервис по HTTP, как обычный клиент.
Гоняются параллельно и проходят за секунды. Я разбирал это на код-ревью, посмотрел и сначала прифигел. А потом не стал переходить на него сам.
Технические детали
Но кое-что забрал себе. Дальше давайте посмотрим на оба подхода, сравним их, разберёмся где какой уместен, и я покажу три вещи, которые подсмотрел и притащил в свой SpringСначала немного разогреваПро слой интеграционных + статанализНе буду в сотый раз рассказывать, почему тесты это важно, и рисовать пирамиду тестирования. Пирамида (куча юнитов снизу, чуть-чуть e2e сверху) придумана в те времена, когда поднять базу в тесте было целым приключением.
Сейчас база поднимается в докере за пару секунд, и картинка поменялась. Кент Доддс описал новую модель как Testing Trophy. Это уже не пирамида, а кубок: узкий верх, потом широкий слой интеграционных тестов, тонкая ножка юнитов и широкое основание из статанализа.
Что поменялось по сравнению с пирамидойСнизу теперь не тесты, а статический анализ. У нас в проекте это Checkstyle, PMD, SpotBugs и pg-index-health. Они ловят кучу ошибок ещё до того, как запустится хоть один тест.
Отраслевые последствия
Самый дешёвый тест это тот, который не пришлось писать, потому что линтер уже не дал наступить на грабли. Про то, как я держу правила для проекта на трёх уровнях (включая статические анализаторы) и зачем это всё, я подробно рассказывал в отдельной статье. Центр тяжести сместился на интеграционные тесты.
Юнит с моками часто врёт: ты замокал ровно то, что хотел проверить, тест зеленеет, а приложение при этом может быть мёртвым. У нас в команде вообще договорились писать только функциональные тесты, потому что они гоняют весь стек целиком: HTTP, сервис, база, Kafka. И ловят реальные косяки на стыках.
И вот когда вся твоя жизнь это функциональные тесты, выясняется, что писать их можно двумя очень разными способами. Я лет десять писал первым способом и был уверен, что так и надо. Пока не открыл чужой репозиторий.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





