Что такое интеграционное тестирование (Integration Testing)?

«Что такое интеграционное тестирование (Integration Testing)?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Интеграционное тестирование — это уровень тестирования, который проверяет корректность взаимодействия и совместной работы двух или более интегрированных модулей, компонентов или систем.

Цель: выявить дефекты на стыках компонентов, такие как:

  • Несовместимость интерфейсов (API, схемы данных).
  • Некорректная передача данных или состояния.
  • Ошибки в бизнес-логике, возникающие при интеграции.
  • Проблемы с внешними зависимостями (БД, кэш, message brokers).

Пример интеграционного теста (Spring Boot + JUnit):

@SpringBootTest
class OrderServiceIntegrationTest {
    @Autowired
    private OrderService orderService;
    @Autowired
    private PaymentServiceClient paymentServiceClient;
    @MockBean
    private NotificationService notificationService; // Мокаем внешний сервис

    @Test
    void processOrder_ShouldSucceed_WhenPaymentIsApproved() {
        // Arrange: Настраиваем мок и тестовые данные
        when(paymentServiceClient.charge(any())).thenReturn(PaymentStatus.APPROVED);
        Order testOrder = new Order("order-123", 100.0);

        // Act: Вызываем метод, который интегрирует несколько сервисов
        OrderResult result = orderService.processOrder(testOrder);

        // Assert: Проверяем результат и взаимодействие
        assertThat(result.isSuccess()).isTrue();
        verify(paymentServiceClient).charge(any()); // Проверяем вызов интеграции
        verify(notificationService).sendOrderConfirmation(any()); // Проверяем side-effect
    }
}
Ключевые отличия от unit-тестов: Аспект Unit-тестирование Интеграционное тестирование
Объект Один класс/функция Группа классов, модули, внешние системы
Зависимости Изолируются (мокаются) Используются реальные или приближенные к реальным
Скорость Быстрое Медленное (требует поднятия контекста, БД и т.д.)
Цель Проверить логику в изоляции Проверить корректность взаимодействия