Gymterview
junior

Что такое SpringBootTest и как он работает?

@SpringBootTest — аннотация, которая создаёт полный контекст Spring-приложения для интеграционного тестирования. Она является заменой устаревших @SpringApplicationConfiguration и @IntegrationTest.

Что происходит при использовании SpringBootTest

  1. Ищется класс с аннотацией @SpringBootConfiguration (обычно главный класс с @SpringBootApplication).
  2. Создаётся полный ApplicationContext со всеми бинами.
  3. Активируется автоконфигурация Spring Boot.
  4. Регистрируется 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).