junior
Что такое интеграционное тестирование?
Интеграционное тестирование – проверка взаимодействия нескольких компонентов системы: приложение + БД, приложение + внешний API, несколько сервисов вместе.
Аналогия из жизни: после того как каждая деталь проверена отдельно (unit), их собирают вместе и проверяют, что механизм работает в сборке – передачи переключаются, двигатель крутит колёса.
Отличие от unit-тестов
| Критерий | Unit-тест | Интеграционный тест |
|---|---|---|
| Зависимости | Замокированы | Реальные (БД, API) |
| Скорость | Миллисекунды | Секунды |
| Что проверяет | Логику метода | Взаимодействие компонентов |
| Инфраструктура | Не нужна | Нужна (БД, контейнеры) |
Пример с Testcontainers
Пример кода
@SpringBootTest
@Testcontainers
class OrderRepositoryIT {
@Container
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16");
@DynamicPropertySource
static void configureProperties(DynamicPropertyRegistry registry) {
registry.add("spring.datasource.url", postgres::getJdbcUrl);
registry.add("spring.datasource.username", postgres::getUsername);
registry.add("spring.datasource.password", postgres::getPassword);
}
@Autowired
private OrderRepository orderRepository;
@Test
void shouldSaveAndFindOrder() {
Order order = new Order("product-1", BigDecimal.valueOf(99.99));
orderRepository.save(order);
Optional<Order> found = orderRepository.findById(order.getId());
assertThat(found).isPresent();
assertThat(found.get().getProductId()).isEqualTo("product-1");
}
}
Ключевые принципы
- Интеграционные тесты дороже unit-тестов – запускайте их реже (CI pipeline)
- Testcontainers – стандарт для интеграционных тестов с БД, Kafka, Redis
@SpringBootTestподнимает полный Spring Context – медленно; используйте слайсы (@DataJpaTest,@WebMvcTest)
Частые ошибки
- H2 вместо реальной БД – синтаксис и поведение отличаются; тесты проходят, production падает
- Общая БД между тестами – данные одного теста влияют на другой; используйте
@Transactionalили очистку - Слишком много интеграционных тестов – медленный CI; придерживайтесь пирамиды тестирования
Как используется в 2026
- Testcontainers + реальная БД – стандарт, H2 для интеграционных тестов считается anti-pattern
- Spring Boot слайсы (
@DataJpaTest,@WebMvcTest) – быстрее полного@SpringBootTest
На собеседовании: интервьюер хочет услышать, чем интеграционный тест отличается от unit-теста, и когда что применять. Частая ошибка – не упомянуть Testcontainers и сказать, что для интеграционных тестов используется H2.