Ответ
Интеграционные тесты проверяют взаимодействие между компонентами системы (БД, API, внешние сервисы). Основной стек: Spring Boot Test с аннотациями @SpringBootTest, @DataJpaTest, @WebMvcTest. Для изоляции зависимостей использую Mockito, для тестовых данных — H2 (in-memory) или Testcontainers (реальные контейнеризированные БД).
Почему это важно: Интеграционные тесты выявляют проблемы, которые unit-тесты не ловят (например, некорректные маппинги JPA, конфигурацию Spring, работу транзакций).
Пример интеграционного теста для REST API:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class UserControllerIntegrationTest {
@Autowired
private TestRestTemplate restTemplate;
@Test
void getUserById_ReturnsUserAndOkStatus() {
ResponseEntity<UserDto> response = restTemplate
.getForEntity("/api/users/1", UserDto.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(response.getBody()).isNotNull();
assertThat(response.getBody().getId()).isEqualTo(1L);
}
}
Ключевые практики:
- Изоляция тестов: Использую
@Transactionalили@DirtiesContextдля очистки состояния между тестами. - Тестовая БД: Для тестов с JPA применяю
@DataJpaTestс H2, для продакшен-подобного окружения — Testcontainers с PostgreSQL. - Слои тестирования: Тестирую не только контроллеры, но и сервисы с репозиториями, чтобы локализовать проблему.