Этап 8 из 15 · ≈ 8 ч

Тестирование

Основа с Junior

Юнит-тесты, интеграционные тесты с настоящей базой, контрактные тесты и тестовая пирамида.

Что важно знать

  • Юнит-тесты — логика без внешних систем, быстро и много.
  • Интеграционные — с настоящей базой и брокером в контейнерах (Testcontainers): ловят ошибки SQL, миграций, сериализации.
  • Моки — для внешних сервисов, не для собственной базы.
  • Контрактные тесты (Spring Cloud Contract, Pact) — сервисы не ломают друг друга при независимой выкатке.
  • Нестабильные тесты чинят сразу, иначе им перестают верить.
  • Тест проверяет поведение, а не внутреннее устройство.

Критерии освоения

Junior ≈ 8 ч

  • Пишет юнит-тесты на бизнес-логику с понятными сценариями
  • Подменяет зависимости там, где это уместно

Практика. Покрыть юнит-тестами сервис расчёта стоимости заказа со скидками, включая граничные случаи.

Middle ≈ 8 ч

  • Пишет интеграционные тесты с настоящей базой и брокером в Testcontainers
  • Тестирует API сервиса и обработку ошибок
  • Вводит контрактные тесты между сервисами

Практика. Написать интеграционные тесты репозитория и обработчика сообщений на Testcontainers с PostgreSQL и Kafka.

Senior ≈ 4 ч

  • Выстраивает стратегию тестирования сервиса — что и каким уровнем покрывать, как держать тесты быстрыми и стабильными

Практика. Провести аудит тестов сервиса — время прогона, нестабильные тесты, пробелы покрытия — и план улучшений.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Какие уровни тестирования вы знаете? Что такое пирамида тестирования?Junior

Четыре уровня: модульное (функция, класс) → интеграционное (взаимодействие частей) → системное (продукт целиком) → приёмочное (готов ли для пользователя).

Полный разбор
Как тестировать REST API?Junior

API тестируют без интерфейса: отправляем запросы (Postman, curl) и проверяем статус, тело ответа, схему данных, побочные эффекты и обработку ошибок.

Полный разбор
Чем unit-тест отличается от интеграционного?Junior

Unit-тест проверяет изолированную логику без внешних зависимостей (моки), быстро. Интеграционный — что компоненты правильно связаны между собой и с реальными системами: база, брокер, HTTP.

Полный разбор
Что проверяют контрактные тесты между сервисами?Middle

Контрактные тесты проверяют, что провайдер API не ломает ожидания потребителя: потребитель фиксирует, какие запросы делает и какие поля читает, провайдер в своей сборке проверяет, что выполняет все контракты.

Полный разбор
Что делает slice-тест вроде @WebMvcTest по сравнению с @SpringBootTest?Middle

@SpringBootTest поднимает весь контекст — медленно, но реалистично. Slice-тесты — узкий срез: @WebMvcTest (контроллеры, фильтры, MockMvc), @DataJpaTest (репозитории и база), @JsonTest. Зависимости среза подменяются моками.

Полный разбор
Почему интеграционные тесты на H2 вместо реальной СУБД считают ненадёжными?Middle

H2 — не та база, что в проде: другой диалект, типы, функции, блокировки и изоляция. Тест проходит на H2 и падает в PostgreSQL. Testcontainers поднимает настоящую базу в Docker на время тестов.

Полный разбор
Чем позитивное тестирование отличается от негативного?Junior

Позитивное — проверка с корректными данными и ожидаемыми действиями; негативное — с некорректными, чтобы убедиться, что система правильно обрабатывает ошибку.

Полный разбор
Как писать тесты на pytest — assert, запуск, параметризация?Junior

Тест — функция с именем test_… в файле test_.py, проверки — обычный assert: pytest показывает, какие значения не совпали. Запуск — команда pytest (или pytest путь::имя_теста). Один тест на много входов — @pytest.mark.parametrize. Ожидаемое исключение — with…

Полный разбор
Чем отличаются smoke, sanity и регрессионное тестирование?Junior

Smoke — быстрая проверка, что сборка вообще работает; sanity — узкая проверка конкретного исправления или функции; регресс — что изменения не сломали старое.

Полный разбор
Что стоит автоматизировать, а что лучше тестировать вручную?Junior

Автоматизируют повторяющиеся, стабильные и критичные проверки — регресс, smoke, API; вручную — новое, меняющееся и то, где важен человеческий взгляд.

Полный разбор

Разборы темы

← Вся карта «Backend-разработчик»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования