Вопрос проверяет понимание поведения аннотации @SpringBootTest при тестировании Spring Boot приложений, а именно, загружает ли она полный контекст приложения.
Аннотация @SpringBootTest является ключевой для интеграционного тестирования в Spring Boot. Она предназначена для создания контекста приложения, который будет использоваться в тестах.
По умолчанию @SpringBootTest запускает тест, загружая полный контекст приложения. Это означает, что сканируются все пакеты, создаются все бины, поднимаются встроенные серверы (если требуется), и применяются все конфигурации, как при обычном запуске приложения через SpringApplication.run(). Такой подход идеален для сквозного (end-to-end) тестирования, где необходимо проверить взаимодействие всех компонентов.
Полная загрузка контекста может быть медленной, особенно для больших приложений. Spring Boot предоставляет механизмы для оптимизации:
Рассмотрим пример теста, который загружает полный контекст и тестирует сервис:
@SpringBootTest
class UserServiceIntegrationTest {
@Autowired
private UserService userService;
@Test
void testGetUser() {
User user = userService.getUserById(1L);
assertThat(user).isNotNull();
assertThat(user.getName()).isEqualTo("John");
}
}А вот пример теста с ограниченной конфигурацией для скорости:
@SpringBootTest(classes = {TestConfig.class, UserService.class})
class UserServiceLightTest {
// Загружаются только указанные классы
}Вывод: Используйте @SpringBootTest с полной загрузкой контекста для интеграционных и сквозных тестов, где важна проверка взаимодействия всех слоев приложения. Для более быстрых unit-подобных тестов отдельных компонентов в изоляции настройте контекст, указав только необходимые классы или используя моки.