Какой контейнер Spring поднимается при выполнении интеграционных тестов с @SpringBootTest?

«Какой контейнер Spring поднимается при выполнении интеграционных тестов с @SpringBootTest?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При запуске интеграционных тестов с аннотацией @SpringBootTest поднимается полный или частичный ApplicationContext Spring, аналогичный контексту работающего приложения.

Что это дает:

  • Загружаются все конфигурации (@Configuration классы).
  • Сканируются и создаются бины (@Component, @Service, @Repository и др.).
  • Настраиваются профили (@ActiveProfiles) и свойства.
  • Внедряются зависимости в тестовый класс через @Autowired.

Пример интеграционного теста:

@SpringBootTest // Запускает контейнер Spring для теста
class UserServiceIntegrationTest {

    @Autowired
    private UserService userService; // Бин из поднятого контекста

    @Test
    void testUserCreation() {
        User user = userService.createUser("John Doe");
        assertNotNull(user);
        assertNotNull(user.getId());
    }
}

Для модульных тестов (без поднятия всего контекста) используются:

  • @MockBean / @SpyBean для мокирования бинов в легковесном контексте.
  • @WebMvcTest для тестирования только слоя MVC.
  • @DataJpaTest для тестирования только JPA-компонентов.