Ответ
@SpringBootTest — основная аннотация Spring Boot для интеграционного тестирования, которая загружает полный контекст приложения.
Что она делает:
- Автоматически находит и загружает конфигурацию из класса, помеченного
@SpringBootApplication. - Создает
ApplicationContext, идентичный контексту реального приложения. - При необходимости запускает встроенный веб-сервер (Tomcat, Jetty, Netty).
Основные параметры:
webEnvironment: определяет тип веб-окружения.WebEnvironment.NONE— без веб-сервера (тесты для сервисного слоя).WebEnvironment.RANDOM_PORT— сервер запускается на случайном порту.WebEnvironment.DEFINED_PORT— сервер использует порт изserver.port(обычно 8080).
Пример теста с REST-запросом:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class UserControllerIntegrationTest {
@Autowired
private TestRestTemplate restTemplate;
@Test
void getUser_ReturnsUser() {
// Действие: Отправка HTTP-запроса
ResponseEntity<UserDto> response = restTemplate
.getForEntity("/api/users/1", UserDto.class);
// Проверка:
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(response.getBody().getId()).isEqualTo(1);
}
}
Когда использовать: Для сквозного (end-to-end) тестирования, когда нужен доступ ко всем бинам (сервисы, репозитории, контроллеры). Для тестирования отдельных слоев предпочтительнее использовать @WebMvcTest (MVC) или @DataJpaTest (JPA).