Чем unit-тест отличается от интеграционного?
- Чем unit-тест отличается от интеграционного?
Unit-тест проверяет изолированную логику без внешних зависимостей (моки), быстро. Интеграционный — что компоненты правильно связаны между собой и с реальными системами: база, брокер, HTTP.
- Unit — миллисекунды, тысячи штук
- Интеграционный в Spring — контекст, Testcontainers
- Оба нужны: unit не поймает ошибку в SQL или маппинге
А ещё Сквозные — через всю систему, их мало
Подробно
Разница в цене и в том, что именно проверяется. Unit-тест выполняется за миллисекунды и не требует контекста Spring, поэтому таких тестов делают много — они закрывают бизнес-правила. Интеграционный поднимает контекст или контейнер с базой, работает секунды и отвечает на вопросы, которые unit-тест закрыть не может: правильно ли отображается сущность, работает ли миграция, тот ли запрос порождает репозиторий. Отсюда форма пирамиды: широкое основание быстрых тестов, меньше интеграционных, единицы сквозных.
Что хотят услышать
- Различие объёма и зависимостей.
Частые ошибки
- Поднимать контекст приложения для проверки чистой бизнес-логики.
- Строить набор из одних сквозных тестов.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Unit-тесты пишет разработчик, а интеграционные — тестировщик после сборки
- ✗Unit-тест проверяет один класс, интеграционный — один метод
- ✗Разница только в используемой библиотеке утверждений
- ✓Unit проверяет логику изолированно и быстро; интеграционный — связку с базой или брокером
Что спросят дальше
- Что такое slice-тест и когда он уместен?
- Почему тесты на встроенной базе могут вводить в заблуждение?
Разбор темы
- Тестирование Spring Boot
Пирамида тестов, unit без Spring, slice-тесты, @SpringBootTest и @MockBean, MockMvc/WebTestClient, Testcontainers и контрактные тесты.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.