Ответ
Интеграционное тестирование — это уровень тестирования, который проверяет корректность взаимодействия и совместной работы двух или более интегрированных модулей, компонентов или систем.
Цель: выявить дефекты на стыках компонентов, такие как:
- Несовместимость интерфейсов (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-тестирование | Интеграционное тестирование |
|---|---|---|---|
| Объект | Один класс/функция | Группа классов, модули, внешние системы | |
| Зависимости | Изолируются (мокаются) | Используются реальные или приближенные к реальным | |
| Скорость | Быстрое | Медленное (требует поднятия контекста, БД и т.д.) | |
| Цель | Проверить логику в изоляции | Проверить корректность взаимодействия |