@SpringBootTest Flashcards

1
Q

Что такое @SpringBootTest

A

Это аннотация, используемая для написания интеграционных тестов в приложениях Spring Boot.
Она загружает весь контекст приложения для тестов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Для чего используется @SpringBootTest

A

Для тестирования всего приложения или его отдельных компонентов в условиях, максимально приближенных к реальной среде выполнения.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Загружает ли @SpringBootTest весь контекст Spring

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Как аннотация работает по умолчанию

A

По умолчанию @SpringBootTest пытается запустить всё приложение, включая сервер, если он настроен.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Как отключить запуск сервера с @SpringBootTest

A

Чтобы отключить запуск сервера, нужно указать параметр
webEnvironment = SpringBootTest
.WebEnvironment
.NONE

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Какие типы окружения можно указать в параметре webEnvironment

A

SpringBootTest
.WebEnvironment
.NONE
– сервер не запускается.

SpringBootTest
.WebEnvironment
.MOCK
– используется заглушка MVC (Mock MVC).
SpringBootTest
.WebEnvironment
.RANDOM_PORT
– запускается сервер с случайным портом.
SpringBootTest
.WebEnvironment
.DEFINED_PORT
– запускается сервер с предопределённым портом (например, указанным в application.properties).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Как протестировать веб-приложение с использованием случайного порта

A

Используйте параметр webEnvironment = SpringBootTest
.WebEnvironment
.RANDOM_PORT
Это создаст сервер на случайном порте, что полезно для параллельных тестов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Как можно инжектировать HTTP клиент в тест с @SpringBootTest

A

Используйте аннотацию @Autowired для внедрения TestRestTemplate или WebTestClient, чтобы отправлять HTTP-запросы к вашему приложению.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Можно ли использовать профили в тестах с @SpringBootTest?

A

Да, вы можете указать профиль с помощью аннотации @ActiveProfiles, чтобы загрузить определённую конфигурацию для тестирования.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Как ограничить загрузку контекста только нужными компонентами

A

Используйте аннотации, такие как @MockBean для мокирования бинов, или аннотацию @TestConfiguration для создания кастомных конфигураций в тестах.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Можно ли использовать @SpringBootTest вместе с другими тестовыми аннотациями

A

Да, например, вместе с @AutoConfigureMockMvc для тестирования MVC-слоя или @AutoConfigureTestDatabase для работы с базой данных в тестах

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Как настроить базу данных в тестах с @SpringBootTest

A

Используйте @AutoConfigureTestDatabase, чтобы указать тестовую базу данных или переключиться на in-memory базы (H2, например) для быстрого тестирования.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Как протестировать взаимодействие с базой данных

A

Используйте @DataJpaTest в сочетании с @SpringBootTest, если хотите тестировать JPA и базу данных в окружении полного контекста Spring Boot

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Как использовать @SpringBootTest с @Transactional

A

Аннотация @Transactional может быть использована вместе с @SpringBootTest, чтобы автоматически откатывать изменения после каждого теста, что полезно для тестирования операций с базой данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Что делать, если тесты медленно загружают контекст

A

Для ускорения можно воспользоваться аннотациями типа @ContextConfiguration и загрузить только нужные компоненты или мокировать зависимости с помощью @MockBean.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Как использовать профили для разных сред тестирования?

A

Аннотация @ActiveProfiles позволяет указать, какой профиль (или несколько профилей) должен быть активен для тестов, чтобы использовать соответствующие настройки приложения.

17
Q

Как загрузить несколько контекстов с разной конфигурацией для тестов?

A

Можно комбинировать аннотацию @SpringBootTest с @ContextConfiguration, что позволяет задавать несколько конфигураций для разных тестовых сценариев.

18
Q

Как работает @SpringBootTest в сочетании с контейнерами (например, Testcontainers)

A

Контексты тестов с @SpringBootTest могут взаимодействовать с контейнерами, используя сторонние библиотеки, такие как Testcontainers, для создания изолированных сред с реальными зависимостями (например, базы данных).

19
Q

Как отлаживать проблемы с загрузкой контекста

A

В случае проблем с загрузкой контекста, можно включить логгирование уровня DEBUG для пакетов Spring Boot или использовать @SpringBootTest(properties = “spring.main.allow-bean-definition-overriding=true”), чтобы отладить конфликты бинов.

20
Q

Как работает кэширование контекста тестов

A

Spring Boot кэширует загруженные контексты между тестами для ускорения тестирования. Если контекст приложения в двух тестах одинаков, то он загружается только один раз.