@SpringBootTest Flashcards
Что такое @SpringBootTest
Это аннотация, используемая для написания интеграционных тестов в приложениях Spring Boot.
Она загружает весь контекст приложения для тестов.
Для чего используется @SpringBootTest
Для тестирования всего приложения или его отдельных компонентов в условиях, максимально приближенных к реальной среде выполнения.
Загружает ли @SpringBootTest весь контекст Spring
Да, @SpringBootTest загружает полный контекст Spring, что делает его полезным для интеграционных тестов.
Как аннотация работает по умолчанию
По умолчанию @SpringBootTest пытается запустить всё приложение, включая сервер, если он настроен.
Как отключить запуск сервера с @SpringBootTest
Чтобы отключить запуск сервера, нужно указать параметр
webEnvironment = SpringBootTest
.WebEnvironment
.NONE
Какие типы окружения можно указать в параметре webEnvironment
SpringBootTest
.WebEnvironment
.NONE
– сервер не запускается.
SpringBootTest
.WebEnvironment
.MOCK
– используется заглушка MVC (Mock MVC).
SpringBootTest
.WebEnvironment
.RANDOM_PORT
– запускается сервер с случайным портом.
SpringBootTest
.WebEnvironment
.DEFINED_PORT
– запускается сервер с предопределённым портом (например, указанным в application.properties).
Как протестировать веб-приложение с использованием случайного порта
Используйте параметр webEnvironment = SpringBootTest
.WebEnvironment
.RANDOM_PORT
Это создаст сервер на случайном порте, что полезно для параллельных тестов.
Как можно инжектировать HTTP клиент в тест с @SpringBootTest
Используйте аннотацию @Autowired для внедрения TestRestTemplate или WebTestClient, чтобы отправлять HTTP-запросы к вашему приложению.
Можно ли использовать профили в тестах с @SpringBootTest?
Да, вы можете указать профиль с помощью аннотации @ActiveProfiles, чтобы загрузить определённую конфигурацию для тестирования.
Как ограничить загрузку контекста только нужными компонентами
Используйте аннотации, такие как @MockBean для мокирования бинов, или аннотацию @TestConfiguration для создания кастомных конфигураций в тестах.
Можно ли использовать @SpringBootTest вместе с другими тестовыми аннотациями
Да, например, вместе с @AutoConfigureMockMvc для тестирования MVC-слоя или @AutoConfigureTestDatabase для работы с базой данных в тестах
Как настроить базу данных в тестах с @SpringBootTest
Используйте @AutoConfigureTestDatabase, чтобы указать тестовую базу данных или переключиться на in-memory базы (H2, например) для быстрого тестирования.
Как протестировать взаимодействие с базой данных
Используйте @DataJpaTest в сочетании с @SpringBootTest, если хотите тестировать JPA и базу данных в окружении полного контекста Spring Boot
Как использовать @SpringBootTest с @Transactional
Аннотация @Transactional может быть использована вместе с @SpringBootTest, чтобы автоматически откатывать изменения после каждого теста, что полезно для тестирования операций с базой данных.
Что делать, если тесты медленно загружают контекст
Для ускорения можно воспользоваться аннотациями типа @ContextConfiguration и загрузить только нужные компоненты или мокировать зависимости с помощью @MockBean.