Ответ
@SpringBootTest — это основная аннотация для интеграционного тестирования Spring Boot приложений. Она загружает полный контекст приложения, имитируя его реальный запуск.
Основное назначение:
- Тестирование взаимодействия нескольких компонентов (сервисов, репозиториев).
- Тестирование с доступом к реальной или in-memory базе данных.
- Тестирование REST API с поднятым embedded-сервером.
Пример базового теста:
@SpringBootTest
class UserServiceIntegrationTest {
@Autowired
private UserService userService;
@Test
void shouldCreateAndFindUser() {
User newUser = userService.create("test@email.com");
User foundUser = userService.findById(newUser.getId());
assertThat(foundUser.getEmail()).isEqualTo("test@email.com");
}
}
Настройка окружения:
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT // Запуск на случайном порту
)
class MyControllerTest {
@LocalServerPort
private int port;
@Test
void testEndpoint() {
// Тестирование через TestRestTemplate или WebTestClient
}
}
| Сравнение с другими аннотациями: | Аннотация | Назначение | Контекст | Скорость |
|---|---|---|---|---|
@SpringBootTest |
Полная интеграция | Полный контекст | Медленно | |
@WebMvcTest |
Тестирование MVC-слоя | Только веб-слой | Быстро | |
@DataJpaTest |
Тестирование JPA | Только JPA и БД | Быстро | |
@JsonTest |
Тестирование JSON | Только Jackson | Очень быстро |
Рекомендации:
- Используйте
@SpringBootTestдля сквозных (end-to-end) тестов. - Для изолированных unit-тестов предпочитайте
@WebMvcTest,@DataJpaTestили обычные тесты без Spring. - Используйте
@MockBeanдля замены тяжелых зависимостей (например, внешних сервисов). - Настройте
@TestConfigurationдля предоставления тестовых бинов.