junior
Что такое SpringBootTest и как он работает?
@SpringBootTest — аннотация, которая создаёт полный контекст Spring-приложения для интеграционного тестирования. Она является заменой устаревших @SpringApplicationConfiguration и @IntegrationTest.
Что происходит при использовании SpringBootTest
- Ищется класс с аннотацией
@SpringBootConfiguration(обычно главный класс с@SpringBootApplication). - Создаётся полный
ApplicationContextсо всеми бинами. - Активируется автоконфигурация Spring Boot.
- Регистрируется
TestRestTemplateи/илиWebTestClient(при необходимости).
Пример
@SpringBootTest
class UserServiceIntegrationTest {
@Autowired
private UserService userService;
@Autowired
private UserRepository userRepository;
@Test
void shouldCreateUser() {
User user = new User("Иван", "ivan@example.com");
User saved = userService.create(user);
assertNotNull(saved.getId());
assertEquals("Иван", saved.getName());
}
}
Можно указать конкретные конфигурационные классы или переопределить свойства:
Пример
@SpringBootTest(classes = {TestConfig.class, UserService.class})
class CustomContextTest { /* ... */ }
@SpringBootTest(properties = {
"spring.datasource.url=jdbc:h2:mem:testdb",
"app.feature.enabled=true"
})
class PropertyOverrideTest { /* ... */ }
На собеседовании: важно объяснить, что
@SpringBootTestподнимает полный контекст и это дорогая операция. Частая ошибка — использовать@SpringBootTestдля юнит-тестов сервисов, где достаточно@ExtendWith(MockitoExtension.class).